Website Summary Files Commits Branches @commit @diff @stats
path: root / src / Web / PUSG.Web / Events / EventService.cs
diff options
context:
space:
mode:
1 files changed, 41 insertions, 0 deletions
-rw-r--r--src/Web/PUSG.Web/Events/EventService.cs41
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);
+ }
+ }
+}