mirror of
https://github.com/jellyfin/jellyfin.git
synced 2025-07-09 03:04:24 -04:00
Use middlewares instead of Routing
This commit is contained in:
parent
f3e7bc0573
commit
194da8416b
@ -657,85 +657,92 @@ namespace Emby.Server.Implementations
|
|||||||
ReceiveBufferSize = 0x10000
|
ReceiveBufferSize = 0x10000
|
||||||
});
|
});
|
||||||
|
|
||||||
app.UseRouter(r =>
|
app.Use(ExecuteWebsocketHandlerAsync);
|
||||||
{
|
app.Use(ExecuteHttpHandlerAsync);
|
||||||
// TODO all the verbs, but really MVC...
|
|
||||||
r.MapGet("/{*localpath}", ExecuteHandler);
|
|
||||||
r.MapPut("/{*localpath}", ExecuteHandler);
|
|
||||||
r.MapPost("/{*localpath}", ExecuteHandler);
|
|
||||||
r.MapDelete("/{*localpath}", ExecuteHandler);
|
|
||||||
r.MapVerb("HEAD", "/{*localpath}", ExecuteHandler);
|
|
||||||
});
|
|
||||||
})
|
})
|
||||||
.Build();
|
.Build();
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task ExecuteHandler(HttpRequest request, Microsoft.AspNetCore.Http.HttpResponse response, RouteData data)
|
public async Task ExecuteWebsocketHandlerAsync(HttpContext context, Func<Task> next)
|
||||||
{
|
{
|
||||||
var ctx = request.HttpContext;
|
if (!context.WebSockets.IsWebSocketRequest)
|
||||||
if (ctx.WebSockets.IsWebSocketRequest)
|
|
||||||
{
|
{
|
||||||
await ((HttpListenerHost)HttpServer)._websocketlistener.ProcessWebSocketRequest(ctx).ConfigureAwait(false);
|
await next();
|
||||||
// try
|
return;
|
||||||
// {
|
|
||||||
// var endpoint = ctx.Request.Path.ToString();
|
|
||||||
// var url = ctx.Request.Path.ToString();
|
|
||||||
|
|
||||||
// var queryString = new QueryParamCollection(request.Query);
|
|
||||||
|
|
||||||
// var connectingArgs = new WebSocketConnectingEventArgs
|
|
||||||
// {
|
|
||||||
// Url = url,
|
|
||||||
// QueryString = queryString,
|
|
||||||
// Endpoint = endpoint
|
|
||||||
// };
|
|
||||||
|
|
||||||
// if (connectingArgs.AllowConnection)
|
|
||||||
// {
|
|
||||||
// Logger.LogDebug("Web socket connection allowed");
|
|
||||||
|
|
||||||
// var webSocketContext = ctx.WebSockets.AcceptWebSocketAsync(null).Result;
|
|
||||||
|
|
||||||
// //SharpWebSocket socket = new SharpWebSocket(webSocketContext, Logger);
|
|
||||||
// //socket.ConnectAsServerAsync().ConfigureAwait(false);
|
|
||||||
|
|
||||||
//// var connection = new WebSocketConnection(webSocketContext, e.Endpoint, _jsonSerializer, _logger)
|
|
||||||
//// {
|
|
||||||
//// OnReceive = ProcessWebSocketMessageReceived,
|
|
||||||
//// Url = e.Url,
|
|
||||||
//// QueryString = e.QueryString ?? new QueryParamCollection()
|
|
||||||
//// };
|
|
||||||
////
|
|
||||||
//// connection.Closed += Connection_Closed;
|
|
||||||
////
|
|
||||||
//// lock (_webSocketConnections)
|
|
||||||
//// {
|
|
||||||
//// _webSocketConnections.Add(connection);
|
|
||||||
//// }
|
|
||||||
////
|
|
||||||
//// WebSocketConnected(new WebSocketConnectEventArgs
|
|
||||||
//// {
|
|
||||||
//// Url = url,
|
|
||||||
//// QueryString = queryString,
|
|
||||||
//// WebSocket = socket,
|
|
||||||
//// Endpoint = endpoint
|
|
||||||
//// });
|
|
||||||
// await webSocketContext.ReceiveAsync(new ArraySegment<byte>(), CancellationToken.None).ConfigureAwait(false);
|
|
||||||
// }
|
|
||||||
// else
|
|
||||||
// {
|
|
||||||
// Logger.LogWarning("Web socket connection not allowed");
|
|
||||||
// ctx.Response.StatusCode = 401;
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// catch (Exception ex)
|
|
||||||
// {
|
|
||||||
// ctx.Response.StatusCode = 500;
|
|
||||||
// }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
await ((HttpListenerHost)HttpServer)._websocketlistener.ProcessWebSocketRequest(context).ConfigureAwait(false);
|
||||||
|
// try
|
||||||
|
// {
|
||||||
|
// var endpoint = ctx.Request.Path.ToString();
|
||||||
|
// var url = ctx.Request.Path.ToString();
|
||||||
|
|
||||||
|
// var queryString = new QueryParamCollection(request.Query);
|
||||||
|
|
||||||
|
// var connectingArgs = new WebSocketConnectingEventArgs
|
||||||
|
// {
|
||||||
|
// Url = url,
|
||||||
|
// QueryString = queryString,
|
||||||
|
// Endpoint = endpoint
|
||||||
|
// };
|
||||||
|
|
||||||
|
// if (connectingArgs.AllowConnection)
|
||||||
|
// {
|
||||||
|
// Logger.LogDebug("Web socket connection allowed");
|
||||||
|
|
||||||
|
// var webSocketContext = ctx.WebSockets.AcceptWebSocketAsync(null).Result;
|
||||||
|
|
||||||
|
// //SharpWebSocket socket = new SharpWebSocket(webSocketContext, Logger);
|
||||||
|
// //socket.ConnectAsServerAsync().ConfigureAwait(false);
|
||||||
|
|
||||||
|
//// var connection = new WebSocketConnection(webSocketContext, e.Endpoint, _jsonSerializer, _logger)
|
||||||
|
//// {
|
||||||
|
//// OnReceive = ProcessWebSocketMessageReceived,
|
||||||
|
//// Url = e.Url,
|
||||||
|
//// QueryString = e.QueryString ?? new QueryParamCollection()
|
||||||
|
//// };
|
||||||
|
////
|
||||||
|
//// connection.Closed += Connection_Closed;
|
||||||
|
////
|
||||||
|
//// lock (_webSocketConnections)
|
||||||
|
//// {
|
||||||
|
//// _webSocketConnections.Add(connection);
|
||||||
|
//// }
|
||||||
|
////
|
||||||
|
//// WebSocketConnected(new WebSocketConnectEventArgs
|
||||||
|
//// {
|
||||||
|
//// Url = url,
|
||||||
|
//// QueryString = queryString,
|
||||||
|
//// WebSocket = socket,
|
||||||
|
//// Endpoint = endpoint
|
||||||
|
//// });
|
||||||
|
// await webSocketContext.ReceiveAsync(new ArraySegment<byte>(), CancellationToken.None).ConfigureAwait(false);
|
||||||
|
// }
|
||||||
|
// else
|
||||||
|
// {
|
||||||
|
// Logger.LogWarning("Web socket connection not allowed");
|
||||||
|
// ctx.Response.StatusCode = 401;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// catch (Exception ex)
|
||||||
|
// {
|
||||||
|
// ctx.Response.StatusCode = 500;
|
||||||
|
// }
|
||||||
|
}
|
||||||
|
public async Task ExecuteHttpHandlerAsync(HttpContext context, Func<Task> next)
|
||||||
|
{
|
||||||
|
if (context.WebSockets.IsWebSocketRequest)
|
||||||
|
{
|
||||||
|
await next();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var request = context.Request;
|
||||||
|
var response = context.Response;
|
||||||
|
var localPath = context.Request.Path.ToString().TrimStart('/');
|
||||||
|
|
||||||
var req = new WebSocketSharpRequest(request, response, request.Path, Logger);
|
var req = new WebSocketSharpRequest(request, response, request.Path, Logger);
|
||||||
await ((HttpListenerHost)HttpServer).RequestHandler(req, request.GetDisplayUrl(), request.Host.ToString(), data.Values["localpath"].ToString(), CancellationToken.None).ConfigureAwait(false);
|
await ((HttpListenerHost)HttpServer).RequestHandler(req, request.GetDisplayUrl(), request.Host.ToString(), localPath, CancellationToken.None).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected virtual IHttpClient CreateHttpClient()
|
protected virtual IHttpClient CreateHttpClient()
|
||||||
|
@ -28,18 +28,8 @@ namespace Emby.Server.Implementations.SocketSharp
|
|||||||
|
|
||||||
public SharpWebSocket(SocketHttpListener.WebSocket socket, ILogger logger)
|
public SharpWebSocket(SocketHttpListener.WebSocket socket, ILogger logger)
|
||||||
{
|
{
|
||||||
if (socket == null)
|
_logger = logger ?? throw new ArgumentNullException(nameof(logger));
|
||||||
{
|
WebSocket = socket ?? throw new ArgumentNullException(nameof(socket));
|
||||||
throw new ArgumentNullException(nameof(socket));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (logger == null)
|
|
||||||
{
|
|
||||||
throw new ArgumentNullException(nameof(logger));
|
|
||||||
}
|
|
||||||
|
|
||||||
_logger = logger;
|
|
||||||
WebSocket = socket;
|
|
||||||
|
|
||||||
socket.OnMessage += OnSocketMessage;
|
socket.OnMessage += OnSocketMessage;
|
||||||
socket.OnClose += OnSocketClose;
|
socket.OnClose += OnSocketClose;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user