using System; using System.Threading.Tasks; using MediaBrowser.Controller; using MediaBrowser.Controller.Events; using Microsoft.Extensions.DependencyInjection; namespace Jellyfin.Server.Implementations.Events { /// /// Handles the firing of events. /// public class EventManager : IEventManager { private readonly IServerApplicationHost _appHost; /// /// Initializes a new instance of the class. /// /// The application host. public EventManager(IServerApplicationHost appHost) { _appHost = appHost; } /// public void Publish(T eventArgs) where T : EventArgs { Task.WaitAll(PublishInternal(eventArgs)); } /// public async Task PublishAsync(T eventArgs) where T : EventArgs { await PublishInternal(eventArgs).ConfigureAwait(false); } private async Task PublishInternal(T eventArgs) where T : EventArgs { using var scope = _appHost.ServiceProvider.CreateScope(); foreach (var service in scope.ServiceProvider.GetServices>()) { await service.OnEvent(eventArgs).ConfigureAwait(false); } } } }