Replace some todos with http extensions and prepare some socket work

This commit is contained in:
Claus Vium
2019-02-26 08:09:42 +01:00
parent c3fa299acc
commit f3e7bc0573
4 changed files with 94 additions and 78 deletions

View File

@@ -110,10 +110,12 @@ using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Http.Extensions;
using Microsoft.AspNetCore.Mvc.Infrastructure;
using Microsoft.AspNetCore.Routing;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.DependencyInjection.Extensions;
using ServiceStack;
using HttpResponse = MediaBrowser.Model.Net.HttpResponse;
using X509Certificate = System.Security.Cryptography.X509Certificates.X509Certificate;
@@ -642,7 +644,12 @@ namespace Emby.Server.Implementations
// await RunStartupTasks().ConfigureAwait(false);
// })
.UseUrls("http://localhost:8096")
.ConfigureServices(s => s.AddRouting())
.ConfigureServices(services =>
{
services.AddRouting();
services.AddHttpContextAccessor();
services.TryAddSingleton<IActionContextAccessor, ActionContextAccessor>();
})
.Configure( app =>
{
app.UseWebSockets(new WebSocketOptions {
@@ -668,62 +675,63 @@ namespace Emby.Server.Implementations
var ctx = request.HttpContext;
if (ctx.WebSockets.IsWebSocketRequest)
{
try
{
var endpoint = ctx.Request.Path.ToString();
var url = ctx.Request.Path.ToString();
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 queryString = new QueryParamCollection(request.Query);
var connectingArgs = new WebSocketConnectingEventArgs
{
Url = url,
QueryString = queryString,
Endpoint = endpoint
};
// var connectingArgs = new WebSocketConnectingEventArgs
// {
// Url = url,
// QueryString = queryString,
// Endpoint = endpoint
// };
if (connectingArgs.AllowConnection)
{
Logger.LogDebug("Web socket connection allowed");
// if (connectingArgs.AllowConnection)
// {
// Logger.LogDebug("Web socket connection allowed");
var webSocketContext = ctx.WebSockets.AcceptWebSocketAsync(null).Result;
// var webSocketContext = ctx.WebSockets.AcceptWebSocketAsync(null).Result;
//SharpWebSocket socket = new SharpWebSocket(webSocketContext, Logger);
//socket.ConnectAsServerAsync().ConfigureAwait(false);
// //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;
}
//// 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;
// }
}
var req = new WebSocketSharpRequest(request, response, request.Path, Logger);