blob: 8ab1b68c766771f850c0d57ad08f0e089ca203f9 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
using PUSG.Web.Events.Api;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace PUSG.Web.Events
{
public class EventService : IEventService
{
private List<IEventHandler> eventHandlers;
public EventService()
{
this.eventHandlers = new List<IEventHandler>();
}
private void DisposeUnavailable()
{
this.eventHandlers.RemoveAll(eventHandler => !eventHandler.IsAvailable());
}
public IEnumerable<IEventHandler> EventHandlers => this.eventHandlers;
public async Task Publish(string eventName, params object[] args)
{
List<IEventHandler> availableHandlers = this.EventHandlers.Where(eventHandler => eventHandler.IsAvailable()).ToList();
foreach (var eventHandler in availableHandlers)
{
await eventHandler.HandleEvent(eventName, args);
}
this.DisposeUnavailable();
}
public void Subscribe(IEventHandler eventHandler)
{
this.eventHandlers.Add(eventHandler);
}
}
}
|