diff --git a/src/main/java/org/qortal/event/Event.java b/src/main/java/org/qortal/event/Event.java new file mode 100644 index 00000000..0c97522c --- /dev/null +++ b/src/main/java/org/qortal/event/Event.java @@ -0,0 +1,5 @@ +package org.qortal.event; + +public interface Event { + +} diff --git a/src/main/java/org/qortal/event/EventBus.java b/src/main/java/org/qortal/event/EventBus.java new file mode 100644 index 00000000..e0014a20 --- /dev/null +++ b/src/main/java/org/qortal/event/EventBus.java @@ -0,0 +1,33 @@ +package org.qortal.event; + +import java.util.ArrayList; +import java.util.List; + +public enum EventBus { + INSTANCE; + + private static final List LISTENERS = new ArrayList<>(); + + public void addListener(Listener newListener) { + synchronized (LISTENERS) { + LISTENERS.add(newListener); + } + } + + public void removeListener(Listener listener) { + synchronized (LISTENERS) { + LISTENERS.remove(listener); + } + } + + public void notify(Event event) { + List clonedListeners; + + synchronized (LISTENERS) { + clonedListeners = new ArrayList<>(LISTENERS); + } + + for (Listener listener : clonedListeners) + listener.listen(event); + } +} diff --git a/src/main/java/org/qortal/event/Listener.java b/src/main/java/org/qortal/event/Listener.java new file mode 100644 index 00000000..cb1668bf --- /dev/null +++ b/src/main/java/org/qortal/event/Listener.java @@ -0,0 +1,6 @@ +package org.qortal.event; + +@FunctionalInterface +public interface Listener { + void listen(Event event); +}