aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Server.Implementations
diff options
context:
space:
mode:
authorLuke Pulverenti <luke.pulverenti@gmail.com>2014-05-17 14:37:40 -0400
committerLuke Pulverenti <luke.pulverenti@gmail.com>2014-05-17 14:37:40 -0400
commit715119b525a026f0f60c9dcaae1d4899cbc6bcda (patch)
treeca08551862654a32fa4240c164e4da51a5508457 /MediaBrowser.Server.Implementations
parentc8e4889ac72b4b6fa01ffd0ccf293363ca5ce744 (diff)
updated nuget
Diffstat (limited to 'MediaBrowser.Server.Implementations')
-rw-r--r--MediaBrowser.Server.Implementations/HttpServer/NativeWebSocket.cs6
-rw-r--r--MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs10
-rw-r--r--MediaBrowser.Server.Implementations/ServerManager/WebSocketConnection.cs12
-rw-r--r--MediaBrowser.Server.Implementations/Session/HttpSessionController.cs5
-rw-r--r--MediaBrowser.Server.Implementations/Session/SessionManager.cs2
-rw-r--r--MediaBrowser.Server.Implementations/Session/SessionWebSocketListener.cs4
-rw-r--r--MediaBrowser.Server.Implementations/Session/WebSocketController.cs34
-rw-r--r--MediaBrowser.Server.Implementations/WebSocket/AlchemyWebSocket.cs5
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>