From 81740acd04d321da339483981a2237453cbe5b49 Mon Sep 17 00:00:00 2001 From: Bas Antonius de Jong <49651652+BAFGdeJong@users.noreply.github.com> Date: Sun, 30 Nov 2025 17:15:14 +0100 Subject: [PATCH] Debugs for EventBus and fixed unsubscribe all (#266) * Added unsubscribe to EventFlow. ListenerHandler now functional. GlobalEventbus now user listenerHandler * getAllListeners * Removed nulls * Fixed stress tests * Added docs, no more list creation when adding events to the bus. * Fixed unsubscribe not working. * Moved away from deprecated functions * moved from wildcard to typed * Moved away from deprecated function * Added debugging to GlobalEventBus * Fixed cleaning flow * Fixed unsubscribe all * Fixed unsubscribe all * Removed unused import --- .../main/java/org/toop/framework/eventbus/EventFlow.java | 7 +++++-- .../java/org/toop/framework/eventbus/GlobalEventBus.java | 9 ++++++++- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/framework/src/main/java/org/toop/framework/eventbus/EventFlow.java b/framework/src/main/java/org/toop/framework/eventbus/EventFlow.java index 797c4a4..5c66728 100644 --- a/framework/src/main/java/org/toop/framework/eventbus/EventFlow.java +++ b/framework/src/main/java/org/toop/framework/eventbus/EventFlow.java @@ -464,14 +464,17 @@ public class EventFlow { * Unsubscribe all events. */ public void unsubscribeAll() { - this.listeners.forEach(this::unsubscribe); + listeners.removeIf(handler -> { + GlobalEventBus.unsubscribe(handler); + return true; + }); } /** * Clean and remove everything inside {@link EventFlow}. */ private void clean() { - this.listeners.clear(); + unsubscribeAll(); this.event = null; this.result = null; } // TODO diff --git a/framework/src/main/java/org/toop/framework/eventbus/GlobalEventBus.java b/framework/src/main/java/org/toop/framework/eventbus/GlobalEventBus.java index 9d03140..f13077c 100644 --- a/framework/src/main/java/org/toop/framework/eventbus/GlobalEventBus.java +++ b/framework/src/main/java/org/toop/framework/eventbus/GlobalEventBus.java @@ -6,6 +6,9 @@ import com.lmax.disruptor.dsl.ProducerType; import java.util.Map; import java.util.concurrent.*; import java.util.function.Consumer; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; import org.toop.framework.eventbus.events.EventType; import org.toop.framework.eventbus.events.UniqueEvent; @@ -14,6 +17,7 @@ import org.toop.framework.eventbus.events.UniqueEvent; * publishing. */ public final class GlobalEventBus { + private static final Logger logger = LogManager.getLogger(GlobalEventBus.class); /** Map of event class to type-specific listeners. */ private static final Map, CopyOnWriteArrayList>> @@ -73,6 +77,7 @@ public final class GlobalEventBus { // Subscription // ------------------------------------------------------------------------ public static void subscribe(ListenerHandler listener) { + logger.debug("Subscribing to {}: {}", listener.getListenerClass().getSimpleName(), listener.getListener().getClass().getSimpleName()); LISTENERS.computeIfAbsent(listener.getListenerClass(), _ -> new CopyOnWriteArrayList<>()).add(listener); } @@ -85,7 +90,7 @@ public final class GlobalEventBus { } public static void unsubscribe(ListenerHandler listener) { - // TODO suspicious call + logger.debug("Unsubscribing from {}: {}", listener.getListenerClass().getSimpleName(), listener.getListener().getClass().getSimpleName()); LISTENERS.getOrDefault(listener.getListenerClass(), new CopyOnWriteArrayList<>()) .remove(listener); LISTENERS.entrySet().removeIf(entry -> entry.getValue().isEmpty()); @@ -129,6 +134,8 @@ public final class GlobalEventBus { private static void dispatchEvent(EventType event) { Class clazz = event.getClass(); + logger.debug("Triggered event: {}", event.getClass().getSimpleName()); + CopyOnWriteArrayList> classListeners = LISTENERS.get(clazz); if (classListeners != null) { for (ListenerHandler listener : classListeners) {