using System.Threading.Tasks; using MediaBrowser.Controller.Net; using Microsoft.AspNetCore.Http; namespace Jellyfin.Server.Middleware { /// /// Handles WebSocket requests. /// public class WebSocketHandlerMiddleware { private readonly RequestDelegate _next; /// /// Initializes a new instance of the class. /// /// The next delegate in the pipeline. public WebSocketHandlerMiddleware(RequestDelegate next) { _next = next; } /// /// Executes the middleware action. /// /// The current HTTP context. /// The WebSocket connection manager. /// Session manager instance. /// The async task. public async Task Invoke( HttpContext httpContext, IWebSocketManager webSocketManager, #pragma warning disable CA1801 #pragma warning disable IDE0060 // TODO: Workaround. see https://github.com/jellyfin/jellyfin/pull/3194 // Do not remove this parameter. It uses DI to create a SessionWebSocketListener which is // required for webSocketManager events. IWebSocketListener websocketListener) #pragma warning restore IDE0060 // Remove unused parameter #pragma warning restore CA1801 { if (!httpContext.WebSockets.IsWebSocketRequest) { await _next(httpContext).ConfigureAwait(false); return; } await webSocketManager.WebSocketRequestHandler(httpContext).ConfigureAwait(false); } } }