aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorClaus Vium <clausvium@gmail.com>2019-02-26 10:23:58 +0100
committerClaus Vium <clausvium@gmail.com>2019-02-26 22:11:21 +0100
commit194da8416bb93b492b86bab6dd199eb5dcc06e55 (patch)
tree65e15e99e3aa238f66622d9eaee68af4eac417f4
parentf3e7bc0573e69df236ac8c565a354520dd094775 (diff)
Use middlewares instead of Routing
-rw-r--r--Emby.Server.Implementations/ApplicationHost.cs147
-rw-r--r--Emby.Server.Implementations/SocketSharp/SharpWebSocket.cs14
2 files changed, 79 insertions, 82 deletions
diff --git a/Emby.Server.Implementations/ApplicationHost.cs b/Emby.Server.Implementations/ApplicationHost.cs
index 18e752e53..ca1dceedf 100644
--- a/Emby.Server.Implementations/ApplicationHost.cs
+++ b/Emby.Server.Implementations/ApplicationHost.cs
@@ -657,85 +657,92 @@ namespace Emby.Server.Implementations
ReceiveBufferSize = 0x10000
});
- app.UseRouter(r =>
- {
- // 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);
- });
+ app.Use(ExecuteWebsocketHandlerAsync);
+ app.Use(ExecuteHttpHandlerAsync);
})
.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 (ctx.WebSockets.IsWebSocketRequest)
+ if (!context.WebSockets.IsWebSocketRequest)
{
- await ((HttpListenerHost)HttpServer)._websocketlistener.ProcessWebSocketRequest(ctx).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;
- // }
+ await next();
+ return;
+ }
+
+ 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);
- 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()
diff --git a/Emby.Server.Implementations/SocketSharp/SharpWebSocket.cs b/Emby.Server.Implementations/SocketSharp/SharpWebSocket.cs
index 80ef451dc..854d33f3a 100644
--- a/Emby.Server.Implementations/SocketSharp/SharpWebSocket.cs
+++ b/Emby.Server.Implementations/SocketSharp/SharpWebSocket.cs
@@ -28,18 +28,8 @@ namespace Emby.Server.Implementations.SocketSharp
public SharpWebSocket(SocketHttpListener.WebSocket socket, ILogger logger)
{
- if (socket == null)
- {
- throw new ArgumentNullException(nameof(socket));
- }
-
- if (logger == null)
- {
- throw new ArgumentNullException(nameof(logger));
- }
-
- _logger = logger;
- WebSocket = socket;
+ _logger = logger ?? throw new ArgumentNullException(nameof(logger));
+ WebSocket = socket ?? throw new ArgumentNullException(nameof(socket));
socket.OnMessage += OnSocketMessage;
socket.OnClose += OnSocketClose;