diff options
1 files changed, 41 insertions, 0 deletions
| -rw-r--r-- | src/Web/PUSG.Web/Events/EventService.cs | 41 |
diff --git a/src/Web/PUSG.Web/Events/EventService.cs b/src/Web/PUSG.Web/Events/EventService.cs new file mode 100644 index 0000000..8ab1b68 --- /dev/null +++ b/src/Web/PUSG.Web/Events/EventService.cs @@ -0,0 +1,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); + } + } +} |