diff options
| author | David Ullmer <daullmer@gmail.com> | 2020-08-31 16:16:01 +0200 |
|---|---|---|
| committer | David Ullmer <daullmer@gmail.com> | 2020-08-31 16:16:01 +0200 |
| commit | b7c07f682152529a9993cd0fb9760ab668d4c930 (patch) | |
| tree | a40f59efb5e6e612df47673359c1d20c72a78101 /Jellyfin.Server.Implementations/Events/EventManager.cs | |
| parent | 9165dc3b3a94714da307079413f62326d5e585ef (diff) | |
| parent | 4cc7406fe92b468f8a4257d7c40bf1e28f2a3404 (diff) | |
Merge branch 'master' into library-pictures
Diffstat (limited to 'Jellyfin.Server.Implementations/Events/EventManager.cs')
| -rw-r--r-- | Jellyfin.Server.Implementations/Events/EventManager.cs | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/Jellyfin.Server.Implementations/Events/EventManager.cs b/Jellyfin.Server.Implementations/Events/EventManager.cs new file mode 100644 index 0000000000..7070024422 --- /dev/null +++ b/Jellyfin.Server.Implementations/Events/EventManager.cs @@ -0,0 +1,60 @@ +using System; +using System.Threading.Tasks; +using MediaBrowser.Controller; +using MediaBrowser.Controller.Events; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Logging; + +namespace Jellyfin.Server.Implementations.Events +{ + /// <summary> + /// Handles the firing of events. + /// </summary> + public class EventManager : IEventManager + { + private readonly ILogger<EventManager> _logger; + private readonly IServerApplicationHost _appHost; + + /// <summary> + /// Initializes a new instance of the <see cref="EventManager"/> class. + /// </summary> + /// <param name="logger">The logger.</param> + /// <param name="appHost">The application host.</param> + public EventManager(ILogger<EventManager> logger, IServerApplicationHost appHost) + { + _logger = logger; + _appHost = appHost; + } + + /// <inheritdoc /> + public void Publish<T>(T eventArgs) + where T : EventArgs + { + Task.WaitAll(PublishInternal(eventArgs)); + } + + /// <inheritdoc /> + public async Task PublishAsync<T>(T eventArgs) + where T : EventArgs + { + await PublishInternal(eventArgs).ConfigureAwait(false); + } + + private async Task PublishInternal<T>(T eventArgs) + where T : EventArgs + { + using var scope = _appHost.ServiceProvider.CreateScope(); + foreach (var service in scope.ServiceProvider.GetServices<IEventConsumer<T>>()) + { + try + { + await service.OnEvent(eventArgs).ConfigureAwait(false); + } + catch (Exception e) + { + _logger.LogError(e, "Uncaught exception in EventConsumer {type}: ", service.GetType()); + } + } + } + } +} |
