mirror of
				https://github.com/jellyfin/jellyfin.git
				synced 2025-10-31 02:27:18 -04:00 
			
		
		
		
	
		
			
				
	
	
		
			66 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			66 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| 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
 | |
|         {
 | |
|             PublishInternal(eventArgs).GetAwaiter().GetResult();
 | |
|         }
 | |
| 
 | |
|         /// <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();
 | |
|             if (scope is null)
 | |
|             {
 | |
|                 return;
 | |
|             }
 | |
| 
 | |
|             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());
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| }
 |