| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 | 
							- using System;
 
- using System.Threading.Tasks;
 
- using MediaBrowser.Controller.Net;
 
- using MediaBrowser.Controller.Session;
 
- using MediaBrowser.Model.Events;
 
- using MediaBrowser.Model.Serialization;
 
- using MediaBrowser.Model.Services;
 
- using Microsoft.AspNetCore.Http;
 
- using Microsoft.Extensions.Logging;
 
- namespace Emby.Server.Implementations.Session
 
- {
 
-     /// <summary>
 
-     /// Class SessionWebSocketListener
 
-     /// </summary>
 
-     public class SessionWebSocketListener : IWebSocketListener, IDisposable
 
-     {
 
-         /// <summary>
 
-         /// The _session manager
 
-         /// </summary>
 
-         private readonly ISessionManager _sessionManager;
 
-         /// <summary>
 
-         /// The _logger
 
-         /// </summary>
 
-         private readonly ILogger _logger;
 
-         /// <summary>
 
-         /// The _dto service
 
-         /// </summary>
 
-         private readonly IJsonSerializer _json;
 
-         private readonly IHttpServer _httpServer;
 
-         /// <summary>
 
-         /// Initializes a new instance of the <see cref="SessionWebSocketListener" /> class.
 
-         /// </summary>
 
-         /// <param name="sessionManager">The session manager.</param>
 
-         /// <param name="loggerFactory">The logger factory.</param>
 
-         /// <param name="json">The json.</param>
 
-         /// <param name="httpServer">The HTTP server.</param>
 
-         public SessionWebSocketListener(ISessionManager sessionManager, ILoggerFactory loggerFactory, IJsonSerializer json, IHttpServer httpServer)
 
-         {
 
-             _sessionManager = sessionManager;
 
-             _logger = loggerFactory.CreateLogger(GetType().Name);
 
-             _json = json;
 
-             _httpServer = httpServer;
 
-             httpServer.WebSocketConnected += _serverManager_WebSocketConnected;
 
-         }
 
-         void _serverManager_WebSocketConnected(object sender, GenericEventArgs<IWebSocketConnection> e)
 
-         {
 
-             var session = GetSession(e.Argument.QueryString, e.Argument.RemoteEndPoint);
 
-             if (session != null)
 
-             {
 
-                 EnsureController(session, e.Argument);
 
-             }
 
-             else
 
-             {
 
-                 _logger.LogWarning("Unable to determine session based on url: {0}", e.Argument.Url);
 
-             }
 
-         }
 
-         private SessionInfo GetSession(IQueryCollection queryString, string remoteEndpoint)
 
-         {
 
-             if (queryString == null)
 
-             {
 
-                 throw new ArgumentNullException(nameof(queryString));
 
-             }
 
-             var token = queryString["api_key"];
 
-             if (string.IsNullOrWhiteSpace(token))
 
-             {
 
-                 return null;
 
-             }
 
-             var deviceId = queryString["deviceId"];
 
-             return _sessionManager.GetSessionByAuthenticationToken(token, deviceId, remoteEndpoint);
 
-         }
 
-         public void Dispose()
 
-         {
 
-             _httpServer.WebSocketConnected -= _serverManager_WebSocketConnected;
 
-         }
 
-         /// <summary>
 
-         /// Processes the message.
 
-         /// </summary>
 
-         /// <param name="message">The message.</param>
 
-         /// <returns>Task.</returns>
 
-         public Task ProcessMessageAsync(WebSocketMessageInfo message)
 
-             => Task.CompletedTask;
 
-         private void EnsureController(SessionInfo session, IWebSocketConnection connection)
 
-         {
 
-             var controllerInfo = session.EnsureController<WebSocketController>(s => new WebSocketController(s, _logger, _sessionManager));
 
-             var controller = (WebSocketController)controllerInfo.Item1;
 
-             controller.AddWebSocket(connection);
 
-         }
 
-     }
 
- }
 
 
  |