From 44f33fdb555aa9be3d710f7e81b995730ae836be Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Fri, 10 May 2013 08:18:07 -0400 Subject: progress on remote control --- .../Session/SessionWebSocketListener.cs | 104 ++++++++++++++++++++- 1 file changed, 99 insertions(+), 5 deletions(-) (limited to 'MediaBrowser.Server.Implementations/Session/SessionWebSocketListener.cs') 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; /// - /// Initializes a new instance of the class. + /// The _logger + /// + private readonly ILogger _logger; + + private readonly IUserManager _userManager; + private readonly ILibraryManager _libraryManager; + + /// + /// Initializes a new instance of the class. /// /// The session manager. - public SessionWebSocketListener(ISessionManager sessionManager) + /// The logger. + /// The library manager. + /// The user manager. + public SessionWebSocketListener(ISessionManager sessionManager, ILogger logger, ILibraryManager libraryManager, IUserManager userManager) { _sessionManager = sessionManager; + _logger = logger; + _libraryManager = libraryManager; + _userManager = userManager; } /// @@ -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); } } -- cgit v1.2.3