BaseWebSocketListener.cs 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. using MediaBrowser.Common.Net;
  2. using System;
  3. using System.Threading.Tasks;
  4. namespace MediaBrowser.Common.Kernel
  5. {
  6. /// <summary>
  7. /// Represents a class that is notified everytime the server receives a message over a WebSocket
  8. /// </summary>
  9. /// <typeparam name="TKernelType">The type of the T kernel type.</typeparam>
  10. public abstract class BaseWebSocketListener<TKernelType> : IWebSocketListener
  11. where TKernelType : IKernel
  12. {
  13. /// <summary>
  14. /// The null task result
  15. /// </summary>
  16. protected Task NullTaskResult = Task.FromResult(true);
  17. /// <summary>
  18. /// Gets the kernel.
  19. /// </summary>
  20. /// <value>The kernel.</value>
  21. protected TKernelType Kernel { get; private set; }
  22. /// <summary>
  23. /// Initializes the specified kernel.
  24. /// </summary>
  25. /// <param name="kernel">The kernel.</param>
  26. public virtual void Initialize(IKernel kernel)
  27. {
  28. if (kernel == null)
  29. {
  30. throw new ArgumentNullException("kernel");
  31. }
  32. Kernel = (TKernelType)kernel;
  33. }
  34. /// <summary>
  35. /// Processes the message.
  36. /// </summary>
  37. /// <param name="message">The message.</param>
  38. /// <returns>Task.</returns>
  39. /// <exception cref="System.ArgumentNullException">message</exception>
  40. public Task ProcessMessage(WebSocketMessageInfo message)
  41. {
  42. if (message == null)
  43. {
  44. throw new ArgumentNullException("message");
  45. }
  46. return ProcessMessageInternal(message);
  47. }
  48. /// <summary>
  49. /// Processes the message internal.
  50. /// </summary>
  51. /// <param name="message">The message.</param>
  52. /// <returns>Task.</returns>
  53. protected abstract Task ProcessMessageInternal(WebSocketMessageInfo message);
  54. /// <summary>
  55. /// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.
  56. /// </summary>
  57. public void Dispose()
  58. {
  59. Dispose(true);
  60. GC.SuppressFinalize(this);
  61. }
  62. /// <summary>
  63. /// Releases unmanaged and - optionally - managed resources.
  64. /// </summary>
  65. /// <param name="dispose"><c>true</c> to release both managed and unmanaged resources; <c>false</c> to release only unmanaged resources.</param>
  66. protected virtual void Dispose(bool dispose)
  67. {
  68. }
  69. }
  70. /// <summary>
  71. /// Interface IWebSocketListener
  72. /// </summary>
  73. public interface IWebSocketListener : IDisposable
  74. {
  75. /// <summary>
  76. /// Processes the message.
  77. /// </summary>
  78. /// <param name="message">The message.</param>
  79. /// <returns>Task.</returns>
  80. Task ProcessMessage(WebSocketMessageInfo message);
  81. /// <summary>
  82. /// Initializes the specified kernel.
  83. /// </summary>
  84. /// <param name="kernel">The kernel.</param>
  85. void Initialize(IKernel kernel);
  86. }
  87. }