aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLukePulverenti <luke.pulverenti@gmail.com>2013-02-22 10:16:48 -0500
committerLukePulverenti <luke.pulverenti@gmail.com>2013-02-22 10:16:48 -0500
commit8b3e8ad478e96543aa437f5a416e7db48ce90a63 (patch)
treedec4813b837b377cafeb832af4297c74475a7942
parentfab627c845d980e46f1385f460c0c4d19fcabc86 (diff)
created IWebSocketListener
-rw-r--r--MediaBrowser.Api/ScheduledTasks/ScheduledTasksWebSocketListener.cs15
-rw-r--r--MediaBrowser.Api/WebSocket/LogFileWebSocketListener.cs33
-rw-r--r--MediaBrowser.Api/WebSocket/SystemInfoWebSocketListener.cs15
-rw-r--r--MediaBrowser.Common/Kernel/BaseKernel.cs5
-rw-r--r--MediaBrowser.Common/Kernel/BasePeriodicWebSocketListener.cs24
-rw-r--r--MediaBrowser.Common/Kernel/BaseWebSocketListener.cs98
-rw-r--r--MediaBrowser.Common/Kernel/IWebSocketListener.cs18
-rw-r--r--MediaBrowser.Common/MediaBrowser.Common.csproj2
-rw-r--r--MediaBrowser.Controller/ScheduledTasks/PeopleValidationTask.cs1
-rw-r--r--MediaBrowser.WebDashboard/Api/DashboardInfoWebSocketListener.cs14
10 files changed, 83 insertions, 142 deletions
diff --git a/MediaBrowser.Api/ScheduledTasks/ScheduledTasksWebSocketListener.cs b/MediaBrowser.Api/ScheduledTasks/ScheduledTasksWebSocketListener.cs
index 7fa47735e..cb7863d84 100644
--- a/MediaBrowser.Api/ScheduledTasks/ScheduledTasksWebSocketListener.cs
+++ b/MediaBrowser.Api/ScheduledTasks/ScheduledTasksWebSocketListener.cs
@@ -1,5 +1,6 @@
using MediaBrowser.Common.Kernel;
using MediaBrowser.Common.ScheduledTasks;
+using MediaBrowser.Controller;
using MediaBrowser.Model.Logging;
using MediaBrowser.Model.Tasks;
using System.Collections.Generic;
@@ -13,7 +14,7 @@ namespace MediaBrowser.Api.ScheduledTasks
/// Class ScheduledTasksWebSocketListener
/// </summary>
[Export(typeof(IWebSocketListener))]
- public class ScheduledTasksWebSocketListener : BasePeriodicWebSocketListener<IKernel, IEnumerable<TaskInfo>, object>
+ public class ScheduledTasksWebSocketListener : BasePeriodicWebSocketListener<IEnumerable<TaskInfo>, object>
{
/// <summary>
/// Gets the name.
@@ -25,14 +26,20 @@ namespace MediaBrowser.Api.ScheduledTasks
}
/// <summary>
+ /// The _kernel
+ /// </summary>
+ private readonly IKernel _kernel;
+
+ /// <summary>
/// Initializes a new instance of the <see cref="ScheduledTasksWebSocketListener" /> class.
/// </summary>
+ /// <param name="kernel">The kernel.</param>
/// <param name="logger">The logger.</param>
[ImportingConstructor]
- public ScheduledTasksWebSocketListener([Import("logger")] ILogger logger)
+ public ScheduledTasksWebSocketListener([Import("kernel")] Kernel kernel, [Import("logger")] ILogger logger)
: base(logger)
{
-
+ _kernel = kernel;
}
/// <summary>
@@ -42,7 +49,7 @@ namespace MediaBrowser.Api.ScheduledTasks
/// <returns>Task{IEnumerable{TaskInfo}}.</returns>
protected override Task<IEnumerable<TaskInfo>> GetDataToSend(object state)
{
- return Task.FromResult(Kernel.ScheduledTasks.OrderBy(i => i.Name)
+ return Task.FromResult(_kernel.ScheduledTasks.OrderBy(i => i.Name)
.Select(ScheduledTaskHelpers.GetTaskInfo));
}
}
diff --git a/MediaBrowser.Api/WebSocket/LogFileWebSocketListener.cs b/MediaBrowser.Api/WebSocket/LogFileWebSocketListener.cs
index f725b0222..144997c73 100644
--- a/MediaBrowser.Api/WebSocket/LogFileWebSocketListener.cs
+++ b/MediaBrowser.Api/WebSocket/LogFileWebSocketListener.cs
@@ -1,12 +1,13 @@
using MediaBrowser.Common.IO;
using MediaBrowser.Common.Kernel;
+using MediaBrowser.Controller;
+using MediaBrowser.Model.Logging;
using System;
using System.Collections.Generic;
using System.ComponentModel.Composition;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
-using MediaBrowser.Model.Logging;
namespace MediaBrowser.Api.WebSocket
{
@@ -14,7 +15,7 @@ namespace MediaBrowser.Api.WebSocket
/// Class ScheduledTasksWebSocketListener
/// </summary>
[Export(typeof(IWebSocketListener))]
- public class LogFileWebSocketListener : BasePeriodicWebSocketListener<IKernel, IEnumerable<string>, LogFileWebSocketState>
+ public class LogFileWebSocketListener : BasePeriodicWebSocketListener<IEnumerable<string>, LogFileWebSocketState>
{
/// <summary>
/// Gets the name.
@@ -26,25 +27,21 @@ namespace MediaBrowser.Api.WebSocket
}
/// <summary>
+ /// The _kernel
+ /// </summary>
+ private readonly IKernel _kernel;
+
+ /// <summary>
/// Initializes a new instance of the <see cref="LogFileWebSocketListener" /> class.
/// </summary>
/// <param name="logger">The logger.</param>
+ /// <param name="kernel">The kernel.</param>
[ImportingConstructor]
- public LogFileWebSocketListener([Import("logger")] ILogger logger)
+ public LogFileWebSocketListener([Import("logger")] ILogger logger, [Import("kernel")] Kernel kernel)
: base(logger)
{
-
- }
-
- /// <summary>
- /// Initializes the specified kernel.
- /// </summary>
- /// <param name="kernel">The kernel.</param>
- public override void Initialize(IKernel kernel)
- {
- base.Initialize(kernel);
-
- kernel.LoggerLoaded += kernel_LoggerLoaded;
+ _kernel = kernel;
+ _kernel.LoggerLoaded += kernel_LoggerLoaded;
}
/// <summary>
@@ -54,9 +51,9 @@ namespace MediaBrowser.Api.WebSocket
/// <returns>IEnumerable{System.String}.</returns>
protected override async Task<IEnumerable<string>> GetDataToSend(LogFileWebSocketState state)
{
- if (!string.Equals(Kernel.LogFilePath, state.LastLogFilePath))
+ if (!string.Equals(_kernel.LogFilePath, state.LastLogFilePath))
{
- state.LastLogFilePath = Kernel.LogFilePath;
+ state.LastLogFilePath = _kernel.LogFilePath;
state.StartLine = 0;
}
@@ -75,7 +72,7 @@ namespace MediaBrowser.Api.WebSocket
{
if (dispose)
{
- Kernel.LoggerLoaded -= kernel_LoggerLoaded;
+ _kernel.LoggerLoaded -= kernel_LoggerLoaded;
}
base.Dispose(dispose);
}
diff --git a/MediaBrowser.Api/WebSocket/SystemInfoWebSocketListener.cs b/MediaBrowser.Api/WebSocket/SystemInfoWebSocketListener.cs
index 51d9f2fcd..c41714581 100644
--- a/MediaBrowser.Api/WebSocket/SystemInfoWebSocketListener.cs
+++ b/MediaBrowser.Api/WebSocket/SystemInfoWebSocketListener.cs
@@ -1,4 +1,5 @@
using MediaBrowser.Common.Kernel;
+using MediaBrowser.Controller;
using MediaBrowser.Model.Logging;
using MediaBrowser.Model.System;
using System.ComponentModel.Composition;
@@ -10,7 +11,7 @@ namespace MediaBrowser.Api.WebSocket
/// Class SystemInfoWebSocketListener
/// </summary>
[Export(typeof(IWebSocketListener))]
- public class SystemInfoWebSocketListener : BasePeriodicWebSocketListener<IKernel, SystemInfo, object>
+ public class SystemInfoWebSocketListener : BasePeriodicWebSocketListener<SystemInfo, object>
{
/// <summary>
/// Gets the name.
@@ -22,14 +23,20 @@ namespace MediaBrowser.Api.WebSocket
}
/// <summary>
+ /// The _kernel
+ /// </summary>
+ private readonly IKernel _kernel;
+
+ /// <summary>
/// Initializes a new instance of the <see cref="SystemInfoWebSocketListener" /> class.
/// </summary>
+ /// <param name="kernel">The kernel.</param>
/// <param name="logger">The logger.</param>
[ImportingConstructor]
- public SystemInfoWebSocketListener([Import("logger")] ILogger logger)
+ public SystemInfoWebSocketListener([Import("kernel")] Kernel kernel, [Import("logger")] ILogger logger)
: base(logger)
{
-
+ _kernel = kernel;
}
/// <summary>
@@ -39,7 +46,7 @@ namespace MediaBrowser.Api.WebSocket
/// <returns>Task{SystemInfo}.</returns>
protected override Task<SystemInfo> GetDataToSend(object state)
{
- return Task.FromResult(Kernel.GetSystemInfo());
+ return Task.FromResult(_kernel.GetSystemInfo());
}
}
}
diff --git a/MediaBrowser.Common/Kernel/BaseKernel.cs b/MediaBrowser.Common/Kernel/BaseKernel.cs
index d172d0a0d..2b3986408 100644
--- a/MediaBrowser.Common/Kernel/BaseKernel.cs
+++ b/MediaBrowser.Common/Kernel/BaseKernel.cs
@@ -553,11 +553,6 @@ namespace MediaBrowser.Common.Kernel
{
return Task.Run(() =>
{
- foreach (var listener in WebSocketListeners)
- {
- listener.Initialize(this);
- }
-
foreach (var task in ScheduledTasks)
{
task.Initialize(this, Logger);
diff --git a/MediaBrowser.Common/Kernel/BasePeriodicWebSocketListener.cs b/MediaBrowser.Common/Kernel/BasePeriodicWebSocketListener.cs
index 11ffa8d6c..0f20758d4 100644
--- a/MediaBrowser.Common/Kernel/BasePeriodicWebSocketListener.cs
+++ b/MediaBrowser.Common/Kernel/BasePeriodicWebSocketListener.cs
@@ -12,11 +12,9 @@ namespace MediaBrowser.Common.Kernel
/// <summary>
/// Starts sending data over a web socket periodically when a message is received, and then stops when a corresponding stop message is received
/// </summary>
- /// <typeparam name="TKernelType">The type of the T kernel type.</typeparam>
/// <typeparam name="TReturnDataType">The type of the T return data type.</typeparam>
/// <typeparam name="TStateType">The type of the T state type.</typeparam>
- public abstract class BasePeriodicWebSocketListener<TKernelType, TReturnDataType, TStateType> : BaseWebSocketListener<TKernelType>
- where TKernelType : IKernel
+ public abstract class BasePeriodicWebSocketListener<TReturnDataType, TStateType> : IWebSocketListener, IDisposable
where TStateType : class, new()
{
/// <summary>
@@ -47,6 +45,7 @@ namespace MediaBrowser.Common.Kernel
/// Initializes a new instance of the <see cref="BasePeriodicWebSocketListener{TStateType}" /> class.
/// </summary>
/// <param name="logger">The logger.</param>
+ /// <exception cref="System.ArgumentNullException">logger</exception>
protected BasePeriodicWebSocketListener(ILogger logger)
{
if (logger == null)
@@ -58,11 +57,16 @@ namespace MediaBrowser.Common.Kernel
}
/// <summary>
- /// Processes the message internal.
+ /// The null task result
+ /// </summary>
+ protected Task NullTaskResult = Task.FromResult(true);
+
+ /// <summary>
+ /// Processes the message.
/// </summary>
/// <param name="message">The message.</param>
/// <returns>Task.</returns>
- protected override Task ProcessMessageInternal(WebSocketMessageInfo message)
+ public Task ProcessMessage(WebSocketMessageInfo message)
{
if (message.MessageType.Equals(Name + "Start", StringComparison.OrdinalIgnoreCase))
{
@@ -223,7 +227,7 @@ namespace MediaBrowser.Common.Kernel
/// Releases unmanaged and - optionally - managed resources.
/// </summary>
/// <param name="dispose"><c>true</c> to release both managed and unmanaged resources; <c>false</c> to release only unmanaged resources.</param>
- protected override void Dispose(bool dispose)
+ protected virtual void Dispose(bool dispose)
{
if (dispose)
{
@@ -235,8 +239,14 @@ namespace MediaBrowser.Common.Kernel
}
}
}
+ }
- base.Dispose(dispose);
+ /// <summary>
+ /// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.
+ /// </summary>
+ public void Dispose()
+ {
+ Dispose(true);
}
}
}
diff --git a/MediaBrowser.Common/Kernel/BaseWebSocketListener.cs b/MediaBrowser.Common/Kernel/BaseWebSocketListener.cs
deleted file mode 100644
index 2870403b2..000000000
--- a/MediaBrowser.Common/Kernel/BaseWebSocketListener.cs
+++ /dev/null
@@ -1,98 +0,0 @@
-using MediaBrowser.Common.Net;
-using System;
-using System.Threading.Tasks;
-
-namespace MediaBrowser.Common.Kernel
-{
- /// <summary>
- /// Represents a class that is notified everytime the server receives a message over a WebSocket
- /// </summary>
- /// <typeparam name="TKernelType">The type of the T kernel type.</typeparam>
- public abstract class BaseWebSocketListener<TKernelType> : IWebSocketListener
- where TKernelType : IKernel
- {
- /// <summary>
- /// The null task result
- /// </summary>
- protected Task NullTaskResult = Task.FromResult(true);
-
- /// <summary>
- /// Gets the kernel.
- /// </summary>
- /// <value>The kernel.</value>
- protected TKernelType Kernel { get; private set; }
-
- /// <summary>
- /// Initializes the specified kernel.
- /// </summary>
- /// <param name="kernel">The kernel.</param>
- public virtual void Initialize(IKernel kernel)
- {
- if (kernel == null)
- {
- throw new ArgumentNullException("kernel");
- }
-
- Kernel = (TKernelType)kernel;
- }
-
- /// <summary>
- /// Processes the message.
- /// </summary>
- /// <param name="message">The message.</param>
- /// <returns>Task.</returns>
- /// <exception cref="System.ArgumentNullException">message</exception>
- public Task ProcessMessage(WebSocketMessageInfo message)
- {
- if (message == null)
- {
- throw new ArgumentNullException("message");
- }
-
- return ProcessMessageInternal(message);
- }
-
- /// <summary>
- /// Processes the message internal.
- /// </summary>
- /// <param name="message">The message.</param>
- /// <returns>Task.</returns>
- protected abstract Task ProcessMessageInternal(WebSocketMessageInfo message);
-
- /// <summary>
- /// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.
- /// </summary>
- public void Dispose()
- {
- Dispose(true);
- GC.SuppressFinalize(this);
- }
-
- /// <summary>
- /// Releases unmanaged and - optionally - managed resources.
- /// </summary>
- /// <param name="dispose"><c>true</c> to release both managed and unmanaged resources; <c>false</c> to release only unmanaged resources.</param>
- protected virtual void Dispose(bool dispose)
- {
- }
- }
-
- /// <summary>
- /// Interface IWebSocketListener
- /// </summary>
- public interface IWebSocketListener : IDisposable
- {
- /// <summary>
- /// Processes the message.
- /// </summary>
- /// <param name="message">The message.</param>
- /// <returns>Task.</returns>
- Task ProcessMessage(WebSocketMessageInfo message);
-
- /// <summary>
- /// Initializes the specified kernel.
- /// </summary>
- /// <param name="kernel">The kernel.</param>
- void Initialize(IKernel kernel);
- }
-}
diff --git a/MediaBrowser.Common/Kernel/IWebSocketListener.cs b/MediaBrowser.Common/Kernel/IWebSocketListener.cs
new file mode 100644
index 000000000..b04bb6885
--- /dev/null
+++ b/MediaBrowser.Common/Kernel/IWebSocketListener.cs
@@ -0,0 +1,18 @@
+using MediaBrowser.Common.Net;
+using System.Threading.Tasks;
+
+namespace MediaBrowser.Common.Kernel
+{
+ /// <summary>
+ ///This is an interface for listening to messages coming through a web socket connection
+ /// </summary>
+ public interface IWebSocketListener
+ {
+ /// <summary>
+ /// Processes the message.
+ /// </summary>
+ /// <param name="message">The message.</param>
+ /// <returns>Task.</returns>
+ Task ProcessMessage(WebSocketMessageInfo message);
+ }
+}
diff --git a/MediaBrowser.Common/MediaBrowser.Common.csproj b/MediaBrowser.Common/MediaBrowser.Common.csproj
index d30dd703b..0f0c58f17 100644
--- a/MediaBrowser.Common/MediaBrowser.Common.csproj
+++ b/MediaBrowser.Common/MediaBrowser.Common.csproj
@@ -137,7 +137,7 @@
<Compile Include="Kernel\BaseApplicationPaths.cs" />
<Compile Include="Kernel\BaseManager.cs" />
<Compile Include="Kernel\BasePeriodicWebSocketListener.cs" />
- <Compile Include="Kernel\BaseWebSocketListener.cs" />
+ <Compile Include="Kernel\IWebSocketListener.cs" />
<Compile Include="Kernel\IApplicationHost.cs" />
<Compile Include="Kernel\IKernel.cs" />
<Compile Include="Kernel\TcpManager.cs" />
diff --git a/MediaBrowser.Controller/ScheduledTasks/PeopleValidationTask.cs b/MediaBrowser.Controller/ScheduledTasks/PeopleValidationTask.cs
index 0fdb91898..2a91f0716 100644
--- a/MediaBrowser.Controller/ScheduledTasks/PeopleValidationTask.cs
+++ b/MediaBrowser.Controller/ScheduledTasks/PeopleValidationTask.cs
@@ -1,5 +1,4 @@
using MediaBrowser.Common.ScheduledTasks;
-using MediaBrowser.Model.Tasks;
using System;
using System.Collections.Generic;
using System.ComponentModel.Composition;
diff --git a/MediaBrowser.WebDashboard/Api/DashboardInfoWebSocketListener.cs b/MediaBrowser.WebDashboard/Api/DashboardInfoWebSocketListener.cs
index 2dcb5e57e..4b9c0bd10 100644
--- a/MediaBrowser.WebDashboard/Api/DashboardInfoWebSocketListener.cs
+++ b/MediaBrowser.WebDashboard/Api/DashboardInfoWebSocketListener.cs
@@ -10,7 +10,7 @@ namespace MediaBrowser.WebDashboard.Api
/// Class DashboardInfoWebSocketListener
/// </summary>
[Export(typeof(IWebSocketListener))]
- class DashboardInfoWebSocketListener : BasePeriodicWebSocketListener<IKernel, DashboardInfo, object>
+ class DashboardInfoWebSocketListener : BasePeriodicWebSocketListener<DashboardInfo, object>
{
/// <summary>
/// Gets the name.
@@ -22,14 +22,20 @@ namespace MediaBrowser.WebDashboard.Api
}
/// <summary>
+ /// The _kernel
+ /// </summary>
+ private readonly Kernel _kernel;
+
+ /// <summary>
/// Initializes a new instance of the <see cref="DashboardInfoWebSocketListener" /> class.
/// </summary>
+ /// <param name="kernel">The kernel.</param>
/// <param name="logger">The logger.</param>
[ImportingConstructor]
- public DashboardInfoWebSocketListener([Import("logger")] ILogger logger)
+ public DashboardInfoWebSocketListener([Import("kernel")] Kernel kernel, [Import("logger")] ILogger logger)
: base(logger)
{
-
+ _kernel = kernel;
}
/// <summary>
@@ -39,7 +45,7 @@ namespace MediaBrowser.WebDashboard.Api
/// <returns>Task{IEnumerable{TaskInfo}}.</returns>
protected override Task<DashboardInfo> GetDataToSend(object state)
{
- return Task.FromResult(DashboardService.GetDashboardInfo((Kernel)Kernel, Logger));
+ return Task.FromResult(DashboardService.GetDashboardInfo(_kernel, Logger));
}
}
}