aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Server.Implementations/Session/SessionWebSocketListener.cs
diff options
context:
space:
mode:
authorLuke Pulverenti <luke.pulverenti@gmail.com>2013-05-10 08:18:07 -0400
committerLuke Pulverenti <luke.pulverenti@gmail.com>2013-05-10 08:18:07 -0400
commit44f33fdb555aa9be3d710f7e81b995730ae836be (patch)
tree193e63642a0aa7ab7603ae6ed9425c8f5d13b80a /MediaBrowser.Server.Implementations/Session/SessionWebSocketListener.cs
parent35a7986b3f2c40e66bb7da6a9ae91b38cc763422 (diff)
progress on remote control
Diffstat (limited to 'MediaBrowser.Server.Implementations/Session/SessionWebSocketListener.cs')
-rw-r--r--MediaBrowser.Server.Implementations/Session/SessionWebSocketListener.cs104
1 files changed, 99 insertions, 5 deletions
diff --git a/MediaBrowser.Server.Implementations/Session/SessionWebSocketListener.cs b/MediaBrowser.Server.Implementations/Session/SessionWebSocketListener.cs
index 59c79c23e..ed1280ea9 100644
--- a/MediaBrowser.Server.Implementations/Session/SessionWebSocketListener.cs
+++ b/MediaBrowser.Server.Implementations/Session/SessionWebSocketListener.cs
@@ -1,5 +1,9 @@
-using MediaBrowser.Common.Net;
+using System.Globalization;
+using MediaBrowser.Common.Net;
+using MediaBrowser.Controller.Dto;
+using MediaBrowser.Controller.Library;
using MediaBrowser.Controller.Session;
+using MediaBrowser.Model.Logging;
using System;
using System.Linq;
using System.Threading.Tasks;
@@ -22,12 +26,26 @@ namespace MediaBrowser.Server.Implementations.Session
private readonly ISessionManager _sessionManager;
/// <summary>
- /// Initializes a new instance of the <see cref="SessionWebSocketListener"/> class.
+ /// The _logger
+ /// </summary>
+ private readonly ILogger _logger;
+
+ private readonly IUserManager _userManager;
+ private readonly ILibraryManager _libraryManager;
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="SessionWebSocketListener" /> class.
/// </summary>
/// <param name="sessionManager">The session manager.</param>
- public SessionWebSocketListener(ISessionManager sessionManager)
+ /// <param name="logger">The logger.</param>
+ /// <param name="libraryManager">The library manager.</param>
+ /// <param name="userManager">The user manager.</param>
+ public SessionWebSocketListener(ISessionManager sessionManager, ILogger logger, ILibraryManager libraryManager, IUserManager userManager)
{
_sessionManager = sessionManager;
+ _logger = logger;
+ _libraryManager = libraryManager;
+ _userManager = userManager;
}
/// <summary>
@@ -44,11 +62,87 @@ namespace MediaBrowser.Server.Implementations.Session
var client = vals[0];
var deviceId = vals[1];
- var session = _sessionManager.AllConnections.FirstOrDefault(i => string.Equals(i.DeviceId, deviceId) && string.Equals(i.Client, client));
+ var session = _sessionManager.Sessions.FirstOrDefault(i => string.Equals(i.DeviceId, deviceId) && string.Equals(i.Client, client));
+
+ if (session != null)
+ {
+ session.WebSocket = message.Connection;
+ }
+ }
+ else if (string.Equals(message.MessageType, "Context", StringComparison.OrdinalIgnoreCase))
+ {
+ var session = _sessionManager.Sessions.FirstOrDefault(i => i.WebSocket == message.Connection);
if (session != null)
{
- ((SessionManager)_sessionManager).IdentifyWebSocket(session.Id, message.Connection);
+ var vals = message.Data.Split('|');
+
+ session.NowViewingItemType = vals[0];
+ session.NowViewingItemIdentifier = vals[1];
+ session.NowViewingContext = vals.Length > 2 ? vals[2] : null;
+ }
+ }
+ else if (string.Equals(message.MessageType, "PlaybackStart", StringComparison.OrdinalIgnoreCase))
+ {
+ var session = _sessionManager.Sessions.FirstOrDefault(i => i.WebSocket == message.Connection);
+
+ if (session != null && session.UserId.HasValue)
+ {
+ var item = DtoBuilder.GetItemByClientId(message.Data, _userManager, _libraryManager);
+
+ _sessionManager.OnPlaybackStart(_userManager.GetUserById(session.UserId.Value), item, session.Client, session.DeviceId, session.DeviceName);
+ }
+ }
+ else if (string.Equals(message.MessageType, "PlaybackProgress", StringComparison.OrdinalIgnoreCase))
+ {
+ var session = _sessionManager.Sessions.FirstOrDefault(i => i.WebSocket == message.Connection);
+
+ if (session != null && session.UserId.HasValue)
+ {
+ var vals = message.Data.Split('|');
+
+ var item = DtoBuilder.GetItemByClientId(vals[0], _userManager, _libraryManager);
+
+ long? positionTicks = null;
+
+ if (vals.Length > 1)
+ {
+ long pos;
+
+ if (long.TryParse(vals[1], out pos))
+ {
+ positionTicks = pos;
+ }
+ }
+
+ var isPaused = vals.Length > 2 && string.Equals(vals[2], "true", StringComparison.OrdinalIgnoreCase);
+
+ _sessionManager.OnPlaybackProgress(_userManager.GetUserById(session.UserId.Value), item, positionTicks, isPaused, session.Client, session.DeviceId, session.DeviceName);
+ }
+ }
+ else if (string.Equals(message.MessageType, "PlaybackStopped", StringComparison.OrdinalIgnoreCase))
+ {
+ var session = _sessionManager.Sessions.FirstOrDefault(i => i.WebSocket == message.Connection);
+
+ if (session != null && session.UserId.HasValue)
+ {
+ var vals = message.Data.Split('|');
+
+ var item = DtoBuilder.GetItemByClientId(vals[0], _userManager, _libraryManager);
+
+ long? positionTicks = null;
+
+ if (vals.Length > 1)
+ {
+ long pos;
+
+ if (long.TryParse(vals[1], out pos))
+ {
+ positionTicks = pos;
+ }
+ }
+
+ _sessionManager.OnPlaybackStopped(_userManager.GetUserById(session.UserId.Value), item, positionTicks, session.Client, session.DeviceId, session.DeviceName);
}
}