ServerEventNotifier.cs 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. using System;
  2. using System.Threading;
  3. using System.Threading.Tasks;
  4. using MediaBrowser.Common.Updates;
  5. using MediaBrowser.Controller.Plugins;
  6. using MediaBrowser.Controller.Session;
  7. using MediaBrowser.Model.Updates;
  8. namespace Emby.Server.Implementations.EntryPoints
  9. {
  10. /// <summary>
  11. /// Class WebSocketEvents.
  12. /// </summary>
  13. public class ServerEventNotifier : IServerEntryPoint
  14. {
  15. /// <summary>
  16. /// The installation manager.
  17. /// </summary>
  18. private readonly IInstallationManager _installationManager;
  19. private readonly ISessionManager _sessionManager;
  20. /// <summary>
  21. /// Initializes a new instance of the <see cref="ServerEventNotifier"/> class.
  22. /// </summary>
  23. /// <param name="installationManager">The installation manager.</param>
  24. /// <param name="sessionManager">The session manager.</param>
  25. public ServerEventNotifier(
  26. IInstallationManager installationManager,
  27. ISessionManager sessionManager)
  28. {
  29. _installationManager = installationManager;
  30. _sessionManager = sessionManager;
  31. }
  32. /// <inheritdoc />
  33. public Task RunAsync()
  34. {
  35. _installationManager.PackageInstallationCancelled += OnPackageInstallationCancelled;
  36. _installationManager.PackageInstallationCompleted += OnPackageInstallationCompleted;
  37. _installationManager.PackageInstallationFailed += OnPackageInstallationFailed;
  38. return Task.CompletedTask;
  39. }
  40. private async void OnPackageInstallationCancelled(object sender, InstallationInfo e)
  41. {
  42. await SendMessageToAdminSessions("PackageInstallationCancelled", e).ConfigureAwait(false);
  43. }
  44. private async void OnPackageInstallationCompleted(object sender, InstallationInfo e)
  45. {
  46. await SendMessageToAdminSessions("PackageInstallationCompleted", e).ConfigureAwait(false);
  47. }
  48. private async void OnPackageInstallationFailed(object sender, InstallationFailedEventArgs e)
  49. {
  50. await SendMessageToAdminSessions("PackageInstallationFailed", e.InstallationInfo).ConfigureAwait(false);
  51. }
  52. private async Task SendMessageToAdminSessions<T>(string name, T data)
  53. {
  54. try
  55. {
  56. await _sessionManager.SendMessageToAdminSessions(name, data, CancellationToken.None).ConfigureAwait(false);
  57. }
  58. catch (Exception)
  59. {
  60. }
  61. }
  62. /// <inheritdoc />
  63. public void Dispose()
  64. {
  65. Dispose(true);
  66. GC.SuppressFinalize(this);
  67. }
  68. /// <summary>
  69. /// Releases unmanaged and - optionally - managed resources.
  70. /// </summary>
  71. /// <param name="dispose"><c>true</c> to release both managed and unmanaged resources; <c>false</c> to release only unmanaged resources.</param>
  72. protected virtual void Dispose(bool dispose)
  73. {
  74. if (dispose)
  75. {
  76. _installationManager.PackageInstallationCancelled -= OnPackageInstallationCancelled;
  77. _installationManager.PackageInstallationCompleted -= OnPackageInstallationCompleted;
  78. _installationManager.PackageInstallationFailed -= OnPackageInstallationFailed;
  79. }
  80. }
  81. }
  82. }