diff options
| author | Luke Pulverenti <luke.pulverenti@gmail.com> | 2013-12-23 19:00:27 -0500 |
|---|---|---|
| committer | Luke Pulverenti <luke.pulverenti@gmail.com> | 2013-12-23 19:00:27 -0500 |
| commit | ce8f37de79b4e629b49c7be83715fe0232531b0c (patch) | |
| tree | 201378545d313bb8cb7886f59a759bac53fc1be1 | |
| parent | 33e384daad10bd55094c09da5ef02b2691086583 (diff) | |
added stub for roku remote controller
4 files changed, 169 insertions, 0 deletions
diff --git a/MediaBrowser.Controller/LiveTv/LiveTvException.cs b/MediaBrowser.Controller/LiveTv/LiveTvException.cs new file mode 100644 index 000000000..0a68180ca --- /dev/null +++ b/MediaBrowser.Controller/LiveTv/LiveTvException.cs @@ -0,0 +1,18 @@ +using System; + +namespace MediaBrowser.Controller.LiveTv +{ + /// <summary> + /// Class LiveTvException. + /// </summary> + public class LiveTvException : Exception + { + } + + /// <summary> + /// Class LiveTvConflictException. + /// </summary> + public class LiveTvConflictException : LiveTvException + { + } +} diff --git a/MediaBrowser.Controller/MediaBrowser.Controller.csproj b/MediaBrowser.Controller/MediaBrowser.Controller.csproj index de9aa3b9f..05a5f58a6 100644 --- a/MediaBrowser.Controller/MediaBrowser.Controller.csproj +++ b/MediaBrowser.Controller/MediaBrowser.Controller.csproj @@ -112,6 +112,7 @@ <Compile Include="LiveTv\ChannelInfo.cs" /> <Compile Include="LiveTv\ILiveTvManager.cs" /> <Compile Include="LiveTv\ILiveTvService.cs" /> + <Compile Include="LiveTv\LiveTvException.cs" /> <Compile Include="LiveTv\StreamResponseInfo.cs" /> <Compile Include="LiveTv\LiveTvProgram.cs" /> <Compile Include="LiveTv\LiveTvRecording.cs" /> diff --git a/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj b/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj index 5a3a9ffe9..29601b396 100644 --- a/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj +++ b/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj @@ -174,6 +174,7 @@ <Compile Include="ServerApplicationPaths.cs" /> <Compile Include="ServerManager\ServerManager.cs" /> <Compile Include="ServerManager\WebSocketConnection.cs" /> + <Compile Include="Session\RokuController.cs" /> <Compile Include="Session\SessionManager.cs"> <SubType>Code</SubType> </Compile> diff --git a/MediaBrowser.Server.Implementations/Session/RokuController.cs b/MediaBrowser.Server.Implementations/Session/RokuController.cs new file mode 100644 index 000000000..f7ca43c9f --- /dev/null +++ b/MediaBrowser.Server.Implementations/Session/RokuController.cs @@ -0,0 +1,149 @@ +using MediaBrowser.Common.Net; +using MediaBrowser.Controller; +using MediaBrowser.Controller.Session; +using MediaBrowser.Model.Entities; +using MediaBrowser.Model.Net; +using MediaBrowser.Model.Serialization; +using MediaBrowser.Model.Session; +using MediaBrowser.Model.System; +using System; +using System.Threading; +using System.Threading.Tasks; + +namespace MediaBrowser.Server.Implementations.Session +{ + public class RokuController : ISessionController + { + private readonly IHttpClient _httpClient; + private readonly IJsonSerializer _json; + private readonly IServerApplicationHost _appHost; + + public SessionInfo Session { get; private set; } + + public RokuController(IHttpClient httpClient, IJsonSerializer json, IServerApplicationHost appHost, SessionInfo session) + { + _httpClient = httpClient; + _json = json; + _appHost = appHost; + Session = session; + } + + public bool SupportsMediaRemoteControl + { + get { return true; } + } + + public bool IsSessionActive + { + get + { + return (DateTime.UtcNow - Session.LastActivityDate).TotalMinutes <= 10; + } + } + + public Task SendSystemCommand(SystemCommand command, CancellationToken cancellationToken) + { + return SendCommand(new WebSocketMessage<string> + { + MessageType = "SystemCommand", + Data = command.ToString() + + }, cancellationToken); + } + + public Task SendMessageCommand(MessageCommand command, CancellationToken cancellationToken) + { + return SendCommand(new WebSocketMessage<MessageCommand> + { + MessageType = "MessageCommand", + Data = command + + }, cancellationToken); + } + + public Task SendPlayCommand(PlayRequest command, CancellationToken cancellationToken) + { + return SendCommand(new WebSocketMessage<PlayRequest> + { + MessageType = "Play", + Data = command + + }, cancellationToken); + } + + public Task SendBrowseCommand(BrowseRequest command, CancellationToken cancellationToken) + { + return SendCommand(new WebSocketMessage<BrowseRequest> + { + MessageType = "Browse", + Data = command + + }, cancellationToken); + } + + public Task SendPlaystateCommand(PlaystateRequest command, CancellationToken cancellationToken) + { + return SendCommand(new WebSocketMessage<PlaystateRequest> + { + MessageType = "Playstate", + Data = command + + }, cancellationToken); + } + + public Task SendLibraryUpdateInfo(LibraryUpdateInfo info, CancellationToken cancellationToken) + { + // Roku probably won't care about this + return Task.FromResult(true); + } + + public Task SendRestartRequiredNotification(CancellationToken cancellationToken) + { + return SendCommand(new WebSocketMessage<SystemInfo> + { + MessageType = "RestartRequired", + Data = _appHost.GetSystemInfo() + + }, cancellationToken); + } + + public Task SendUserDataChangeInfo(UserDataChangeInfo info, CancellationToken cancellationToken) + { + // Roku probably won't care about this + return Task.FromResult(true); + } + + public Task SendServerShutdownNotification(CancellationToken cancellationToken) + { + return SendCommand(new WebSocketMessage<string> + { + MessageType = "ServerShuttingDown", + Data = string.Empty + + }, cancellationToken); + } + + public Task SendServerRestartNotification(CancellationToken cancellationToken) + { + return SendCommand(new WebSocketMessage<string> + { + MessageType = "ServerRestarting", + Data = string.Empty + + }, cancellationToken); + } + + private Task SendCommand(object obj, CancellationToken cancellationToken) + { + var json = _json.SerializeToString(obj); + + return _httpClient.Post(new HttpRequestOptions + { + Url = "mb/remotecontrol", + CancellationToken = cancellationToken, + RequestContent = json, + RequestContentType = "application/json" + }); + } + } +} |
