diff options
| author | Luke Pulverenti <luke.pulverenti@gmail.com> | 2013-05-10 08:18:07 -0400 |
|---|---|---|
| committer | Luke Pulverenti <luke.pulverenti@gmail.com> | 2013-05-10 08:18:07 -0400 |
| commit | 44f33fdb555aa9be3d710f7e81b995730ae836be (patch) | |
| tree | 193e63642a0aa7ab7603ae6ed9425c8f5d13b80a /MediaBrowser.Server.Implementations/Session/SessionWebSocketListener.cs | |
| parent | 35a7986b3f2c40e66bb7da6a9ae91b38cc763422 (diff) | |
progress on remote control
Diffstat (limited to 'MediaBrowser.Server.Implementations/Session/SessionWebSocketListener.cs')
| -rw-r--r-- | MediaBrowser.Server.Implementations/Session/SessionWebSocketListener.cs | 104 |
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); } } |
