From 715119b525a026f0f60c9dcaae1d4899cbc6bcda Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Sat, 17 May 2014 14:37:40 -0400 Subject: updated nuget --- .../HttpServer/NativeWebSocket.cs | 6 +++- .../LiveTv/LiveTvManager.cs | 10 ++++++- .../ServerManager/WebSocketConnection.cs | 12 +++++++- .../Session/HttpSessionController.cs | 5 ++++ .../Session/SessionManager.cs | 2 +- .../Session/SessionWebSocketListener.cs | 4 +-- .../Session/WebSocketController.cs | 34 ++++++++++++++++++++-- .../WebSocket/AlchemyWebSocket.cs | 5 ++++ 8 files changed, 70 insertions(+), 8 deletions(-) (limited to 'MediaBrowser.Server.Implementations') diff --git a/MediaBrowser.Server.Implementations/HttpServer/NativeWebSocket.cs b/MediaBrowser.Server.Implementations/HttpServer/NativeWebSocket.cs index ff822a4e6..f89cdac47 100644 --- a/MediaBrowser.Server.Implementations/HttpServer/NativeWebSocket.cs +++ b/MediaBrowser.Server.Implementations/HttpServer/NativeWebSocket.cs @@ -1,4 +1,5 @@ -using MediaBrowser.Common.Net; +using MediaBrowser.Common.Events; +using MediaBrowser.Common.Net; using MediaBrowser.Model.Logging; using System; using System.Net.WebSockets; @@ -19,6 +20,8 @@ namespace MediaBrowser.Server.Implementations.HttpServer /// private readonly ILogger _logger; + public event EventHandler Closed; + /// /// Gets or sets the web socket. /// @@ -97,6 +100,7 @@ namespace MediaBrowser.Server.Implementations.HttpServer if (bytes == null) { // Connection closed + EventHelper.FireEventIfNotNull(Closed, this, EventArgs.Empty, _logger); break; } diff --git a/MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs b/MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs index 11d010ca1..d989c0866 100644 --- a/MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs +++ b/MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs @@ -84,7 +84,15 @@ namespace MediaBrowser.Server.Implementations.LiveTv { _services.AddRange(services); - SetActiveService(_services.FirstOrDefault()); + SetActiveService(_config.Configuration.LiveTvOptions.ActiveService); + } + + private void SetActiveService(string name) + { + var service = _services.FirstOrDefault(i => string.Equals(i.Name, name, StringComparison.OrdinalIgnoreCase)) ?? + _services.FirstOrDefault(); + + SetActiveService(service); } private void SetActiveService(ILiveTvService service) diff --git a/MediaBrowser.Server.Implementations/ServerManager/WebSocketConnection.cs b/MediaBrowser.Server.Implementations/ServerManager/WebSocketConnection.cs index b800a9cbe..2b60f3116 100644 --- a/MediaBrowser.Server.Implementations/ServerManager/WebSocketConnection.cs +++ b/MediaBrowser.Server.Implementations/ServerManager/WebSocketConnection.cs @@ -1,4 +1,5 @@ -using MediaBrowser.Common.Net; +using MediaBrowser.Common.Events; +using MediaBrowser.Common.Net; using MediaBrowser.Model.Logging; using MediaBrowser.Model.Net; using MediaBrowser.Model.Serialization; @@ -14,6 +15,8 @@ namespace MediaBrowser.Server.Implementations.ServerManager /// public class WebSocketConnection : IWebSocketConnection { + public event EventHandler Closed; + /// /// The _socket /// @@ -96,6 +99,13 @@ namespace MediaBrowser.Server.Implementations.ServerManager _socket.OnReceive = OnReceiveInternal; RemoteEndPoint = remoteEndPoint; _logger = logger; + + socket.Closed += socket_Closed; + } + + void socket_Closed(object sender, EventArgs e) + { + EventHelper.FireEventIfNotNull(Closed, this, EventArgs.Empty, _logger); } /// diff --git a/MediaBrowser.Server.Implementations/Session/HttpSessionController.cs b/MediaBrowser.Server.Implementations/Session/HttpSessionController.cs index 8d6289217..236963b9b 100644 --- a/MediaBrowser.Server.Implementations/Session/HttpSessionController.cs +++ b/MediaBrowser.Server.Implementations/Session/HttpSessionController.cs @@ -45,6 +45,11 @@ namespace MediaBrowser.Server.Implementations.Session } } + public bool SupportsMediaControl + { + get { return true; } + } + private Task SendMessage(object obj, CancellationToken cancellationToken) { var json = _json.SerializeToString(obj); diff --git a/MediaBrowser.Server.Implementations/Session/SessionManager.cs b/MediaBrowser.Server.Implementations/Session/SessionManager.cs index 26e451a81..cfa7cef67 100644 --- a/MediaBrowser.Server.Implementations/Session/SessionManager.cs +++ b/MediaBrowser.Server.Implementations/Session/SessionManager.cs @@ -1164,7 +1164,7 @@ namespace MediaBrowser.Server.Implementations.Session SupportedCommands = session.SupportedCommands, UserName = session.UserName, NowPlayingItem = session.NowPlayingItem, - + SupportsRemoteControl = session.SupportsMediaControl, PlayState = session.PlayState }; diff --git a/MediaBrowser.Server.Implementations/Session/SessionWebSocketListener.cs b/MediaBrowser.Server.Implementations/Session/SessionWebSocketListener.cs index 565d83ac3..1a042ede6 100644 --- a/MediaBrowser.Server.Implementations/Session/SessionWebSocketListener.cs +++ b/MediaBrowser.Server.Implementations/Session/SessionWebSocketListener.cs @@ -138,10 +138,10 @@ namespace MediaBrowser.Server.Implementations.Session if (controller == null) { - controller = new WebSocketController(session, _appHost, _logger); + controller = new WebSocketController(session, _appHost, _logger, _sessionManager); } - controller.Sockets.Add(message.Connection); + controller.AddWebSocket(message.Connection); session.SessionController = controller; } diff --git a/MediaBrowser.Server.Implementations/Session/WebSocketController.cs b/MediaBrowser.Server.Implementations/Session/WebSocketController.cs index 040705171..6f4dd0a72 100644 --- a/MediaBrowser.Server.Implementations/Session/WebSocketController.cs +++ b/MediaBrowser.Server.Implementations/Session/WebSocketController.cs @@ -17,16 +17,19 @@ namespace MediaBrowser.Server.Implementations.Session public class WebSocketController : ISessionController { public SessionInfo Session { get; private set; } - public List Sockets { get; private set; } + public IReadOnlyList Sockets { get; private set; } private readonly IServerApplicationHost _appHost; private readonly ILogger _logger; - public WebSocketController(SessionInfo session, IServerApplicationHost appHost, ILogger logger) + private readonly ISessionManager _sessionManager; + + public WebSocketController(SessionInfo session, IServerApplicationHost appHost, ILogger logger, ISessionManager sessionManager) { Session = session; _appHost = appHost; _logger = logger; + _sessionManager = sessionManager; Sockets = new List(); } @@ -38,6 +41,11 @@ namespace MediaBrowser.Server.Implementations.Session } } + public bool SupportsMediaControl + { + get { return GetActiveSockets().Any(); } + } + private IEnumerable GetActiveSockets() { return Sockets @@ -45,6 +53,28 @@ namespace MediaBrowser.Server.Implementations.Session .Where(i => i.State == WebSocketState.Open); } + public void AddWebSocket(IWebSocketConnection connection) + { + var sockets = Sockets.ToList(); + sockets.Add(connection); + + Sockets = sockets; + + connection.Closed += connection_Closed; + } + + void connection_Closed(object sender, EventArgs e) + { + var capabilities = new SessionCapabilities + { + PlayableMediaTypes = Session.PlayableMediaTypes, + SupportedCommands = Session.SupportedCommands, + SupportsMediaControl = SupportsMediaControl + }; + + _sessionManager.ReportCapabilities(Session.Id, capabilities); + } + private IWebSocketConnection GetActiveSocket() { var socket = GetActiveSockets() diff --git a/MediaBrowser.Server.Implementations/WebSocket/AlchemyWebSocket.cs b/MediaBrowser.Server.Implementations/WebSocket/AlchemyWebSocket.cs index 2918c7ecd..35c5e780b 100644 --- a/MediaBrowser.Server.Implementations/WebSocket/AlchemyWebSocket.cs +++ b/MediaBrowser.Server.Implementations/WebSocket/AlchemyWebSocket.cs @@ -1,4 +1,5 @@ using Alchemy.Classes; +using MediaBrowser.Common.Events; using MediaBrowser.Common.Net; using MediaBrowser.Model.Logging; using MediaBrowser.Model.Net; @@ -18,6 +19,8 @@ namespace MediaBrowser.Server.Implementations.WebSocket /// private readonly ILogger _logger; + public event EventHandler Closed; + /// /// Gets or sets the web socket. /// @@ -66,6 +69,8 @@ namespace MediaBrowser.Server.Implementations.WebSocket private void OnDisconnected(UserContext context) { _disconnected = true; + + EventHelper.FireEventIfNotNull(Closed, this, EventArgs.Empty, _logger); } /// -- cgit v1.2.3