diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/network/EventBus.java b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/network/EventBus.java new file mode 100644 index 0000000..5802c8c --- /dev/null +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/network/EventBus.java @@ -0,0 +1,23 @@ +package ch.unibas.dmi.dbis.cs108.casono.server.network; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.CopyOnWriteArrayList; +import java.util.function.Consumer; + +public class EventBus { + private final Map, List>> handlers = new ConcurrentHashMap<>(); + + public void subscribe(Class eventType, Consumer handler) { + handlers.computeIfAbsent(eventType, k -> new CopyOnWriteArrayList<>()) + .add((Consumer) handler); + } + + public void publish(T event) { + List> subscribers = handlers.get(event.getClass()); + if (subscribers != null) { + subscribers.forEach(h -> h.accept(event)); + } + } +}