From 48facb797ed912e4ea6b04b17d1ff190ac2daac4 Mon Sep 17 00:00:00 2001 From: stefan Date: Wed, 12 Sep 2018 19:26:21 +0200 Subject: Update to 3.5.2 and .net core 2.1 --- .../Session/WebSocketController.cs | 208 ++------------------- 1 file changed, 13 insertions(+), 195 deletions(-) (limited to 'Emby.Server.Implementations/Session/WebSocketController.cs') diff --git a/Emby.Server.Implementations/Session/WebSocketController.cs b/Emby.Server.Implementations/Session/WebSocketController.cs index b13eb6116..ddac9660f 100644 --- a/Emby.Server.Implementations/Session/WebSocketController.cs +++ b/Emby.Server.Implementations/Session/WebSocketController.cs @@ -10,6 +10,7 @@ using System.Collections.Generic; using System.Linq; using System.Threading; using System.Threading.Tasks; +using System.Net.WebSockets; namespace Emby.Server.Implementations.Session { @@ -40,28 +41,14 @@ namespace Emby.Server.Implementations.Session get { return HasOpenSockets; } } - private bool _isActive; - private DateTime _lastActivityDate; public bool IsSessionActive { get { - if (HasOpenSockets) - { - return true; - } - - //return false; - return _isActive && (DateTime.UtcNow - _lastActivityDate).TotalMinutes <= 10; + return HasOpenSockets; } } - public void OnActivity() - { - _isActive = true; - _lastActivityDate = DateTime.UtcNow; - } - private IEnumerable GetActiveSockets() { return Sockets @@ -81,209 +68,40 @@ namespace Emby.Server.Implementations.Session void connection_Closed(object sender, EventArgs e) { - if (!GetActiveSockets().Any()) - { - _isActive = false; + var connection = (IWebSocketConnection)sender; + var sockets = Sockets.ToList(); + sockets.Remove(connection); - try - { - _sessionManager.ReportSessionEnded(Session.Id); - } - catch (Exception ex) - { - _logger.ErrorException("Error reporting session ended.", ex); - } - } + Sockets = sockets; + + _sessionManager.CloseIfNeeded(Session); } - private IWebSocketConnection GetActiveSocket() + public Task SendMessage(string name, string messageId, T data, ISessionController[] allControllers, CancellationToken cancellationToken) { var socket = GetActiveSockets() .FirstOrDefault(); if (socket == null) { - throw new InvalidOperationException("The requested session does not have an open web socket."); + return Task.CompletedTask; } - return socket; - } - - public Task SendPlayCommand(PlayRequest command, CancellationToken cancellationToken) - { - return SendMessageInternal(new WebSocketMessage - { - MessageType = "Play", - Data = command - - }, cancellationToken); - } - - public Task SendPlaystateCommand(PlaystateRequest command, CancellationToken cancellationToken) - { - return SendMessageInternal(new WebSocketMessage - { - MessageType = "Playstate", - Data = command - - }, cancellationToken); - } - - public Task SendLibraryUpdateInfo(LibraryUpdateInfo info, CancellationToken cancellationToken) - { - return SendMessagesInternal(new WebSocketMessage - { - MessageType = "LibraryChanged", - Data = info - - }, cancellationToken); - } - - /// - /// Sends the restart required message. - /// - /// The information. - /// The cancellation token. - /// Task. - public Task SendRestartRequiredNotification(CancellationToken cancellationToken) - { - return SendMessagesInternal(new WebSocketMessage - { - MessageType = "RestartRequired", - Data = string.Empty - - }, cancellationToken); - } - - - /// - /// Sends the user data change info. - /// - /// The info. - /// The cancellation token. - /// Task. - public Task SendUserDataChangeInfo(UserDataChangeInfo info, CancellationToken cancellationToken) - { - return SendMessagesInternal(new WebSocketMessage - { - MessageType = "UserDataChanged", - Data = info - - }, cancellationToken); - } - - /// - /// Sends the server shutdown notification. - /// - /// The cancellation token. - /// Task. - public Task SendServerShutdownNotification(CancellationToken cancellationToken) - { - return SendMessagesInternal(new WebSocketMessage - { - MessageType = "ServerShuttingDown", - Data = string.Empty - - }, cancellationToken); - } - - /// - /// Sends the server restart notification. - /// - /// The cancellation token. - /// Task. - public Task SendServerRestartNotification(CancellationToken cancellationToken) - { - return SendMessagesInternal(new WebSocketMessage - { - MessageType = "ServerRestarting", - Data = string.Empty - - }, cancellationToken); - } - - public Task SendGeneralCommand(GeneralCommand command, CancellationToken cancellationToken) - { - return SendMessageInternal(new WebSocketMessage - { - MessageType = "GeneralCommand", - Data = command - - }, cancellationToken); - } - - public Task SendSessionEndedNotification(SessionInfoDto sessionInfo, CancellationToken cancellationToken) - { - return SendMessagesInternal(new WebSocketMessage - { - MessageType = "SessionEnded", - Data = sessionInfo - - }, cancellationToken); - } - - public Task SendPlaybackStartNotification(SessionInfoDto sessionInfo, CancellationToken cancellationToken) - { - return SendMessagesInternal(new WebSocketMessage - { - MessageType = "PlaybackStart", - Data = sessionInfo - - }, cancellationToken); - } - - public Task SendPlaybackStoppedNotification(SessionInfoDto sessionInfo, CancellationToken cancellationToken) - { - return SendMessagesInternal(new WebSocketMessage - { - MessageType = "PlaybackStopped", - Data = sessionInfo - - }, cancellationToken); - } - - public Task SendMessage(string name, T data, CancellationToken cancellationToken) - { - return SendMessagesInternal(new WebSocketMessage + return socket.SendAsync(new WebSocketMessage { Data = data, - MessageType = name + MessageType = name, + MessageId = messageId }, cancellationToken); } - private Task SendMessageInternal(WebSocketMessage message, CancellationToken cancellationToken) - { - var socket = GetActiveSocket(); - - return socket.SendAsync(message, cancellationToken); - } - - private Task SendMessagesInternal(WebSocketMessage message, CancellationToken cancellationToken) - { - var tasks = GetActiveSockets().Select(i => Task.Run(async () => - { - try - { - await i.SendAsync(message, cancellationToken).ConfigureAwait(false); - } - catch (Exception ex) - { - _logger.ErrorException("Error sending web socket message", ex); - } - - }, cancellationToken)); - - return Task.WhenAll(tasks); - } - public void Dispose() { foreach (var socket in Sockets.ToList()) { socket.Closed -= connection_Closed; } - GC.SuppressFinalize(this); } } } -- cgit v1.2.3