diff options
| author | Luke Pulverenti <luke.pulverenti@gmail.com> | 2014-05-17 14:37:40 -0400 |
|---|---|---|
| committer | Luke Pulverenti <luke.pulverenti@gmail.com> | 2014-05-17 14:37:40 -0400 |
| commit | 715119b525a026f0f60c9dcaae1d4899cbc6bcda (patch) | |
| tree | ca08551862654a32fa4240c164e4da51a5508457 /MediaBrowser.Server.Implementations | |
| parent | c8e4889ac72b4b6fa01ffd0ccf293363ca5ce744 (diff) | |
updated nuget
Diffstat (limited to 'MediaBrowser.Server.Implementations')
8 files changed, 70 insertions, 8 deletions
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 /// </summary> private readonly ILogger _logger; + public event EventHandler<EventArgs> Closed; + /// <summary> /// Gets or sets the web socket. /// </summary> @@ -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 /// </summary> public class WebSocketConnection : IWebSocketConnection { + public event EventHandler<EventArgs> Closed; + /// <summary> /// The _socket /// </summary> @@ -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); } /// <summary> 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<IWebSocketConnection> Sockets { get; private set; } + public IReadOnlyList<IWebSocketConnection> 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<IWebSocketConnection>(); } @@ -38,6 +41,11 @@ namespace MediaBrowser.Server.Implementations.Session } } + public bool SupportsMediaControl + { + get { return GetActiveSockets().Any(); } + } + private IEnumerable<IWebSocketConnection> 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 /// </summary> private readonly ILogger _logger; + public event EventHandler<EventArgs> Closed; + /// <summary> /// Gets or sets the web socket. /// </summary> @@ -66,6 +69,8 @@ namespace MediaBrowser.Server.Implementations.WebSocket private void OnDisconnected(UserContext context) { _disconnected = true; + + EventHelper.FireEventIfNotNull(Closed, this, EventArgs.Empty, _logger); } /// <summary> |
