From 64adf9c9f9bab7d43180a9d3abdf00a4a972f7f2 Mon Sep 17 00:00:00 2001 From: extio-de Date: Fri, 26 Dec 2025 15:57:57 +0100 Subject: [PATCH] feat(event): Add unregisterAll method to EventService and EventHandlerRegistry --- .../game_engine/event/EventHandlerRegistry.java | 6 ++++++ .../de/extio/game_engine/event/EventService.java | 2 ++ .../extio/game_engine/event/EventServiceImpl.java | 5 +++++ .../extio/game_engine/event/EventServiceTest.java | 15 +++++++++++++++ 4 files changed, 28 insertions(+) diff --git a/src/main/java/de/extio/game_engine/event/EventHandlerRegistry.java b/src/main/java/de/extio/game_engine/event/EventHandlerRegistry.java index 219f88d..887dfe9 100644 --- a/src/main/java/de/extio/game_engine/event/EventHandlerRegistry.java +++ b/src/main/java/de/extio/game_engine/event/EventHandlerRegistry.java @@ -22,6 +22,12 @@ public class EventHandlerRegistry { consumers.removeIf(ec -> ec.id().equals(consumerId)); } } + + public void unregisterAll(final String consumerId) { + for (final var consumers : this.handlers.values()) { + consumers.removeIf(ec -> ec.id().equals(consumerId)); + } + } List getHandlers(final Class eventClass) { return this.handlers.get(eventClass); diff --git a/src/main/java/de/extio/game_engine/event/EventService.java b/src/main/java/de/extio/game_engine/event/EventService.java index c4acda6..880b6b4 100644 --- a/src/main/java/de/extio/game_engine/event/EventService.java +++ b/src/main/java/de/extio/game_engine/event/EventService.java @@ -7,6 +7,8 @@ public interface EventService { void register(Class eventClass, String consumerId, Consumer consumer); void unregister(Class eventClass, String consumerId); + + void unregisterAll(String consumerId); void fire(Event event); diff --git a/src/main/java/de/extio/game_engine/event/EventServiceImpl.java b/src/main/java/de/extio/game_engine/event/EventServiceImpl.java index b5fa94a..30216d7 100644 --- a/src/main/java/de/extio/game_engine/event/EventServiceImpl.java +++ b/src/main/java/de/extio/game_engine/event/EventServiceImpl.java @@ -22,6 +22,11 @@ public class EventServiceImpl implements EventService { this.registry.unregister(eventClass, consumerId); } + @Override + public void unregisterAll(final String consumerId) { + this.registry.unregisterAll(consumerId); + } + @Override public void fire(final Event event) { this.executor.submit(event); diff --git a/src/test/java/de/extio/game_engine/event/EventServiceTest.java b/src/test/java/de/extio/game_engine/event/EventServiceTest.java index da1d045..537a346 100644 --- a/src/test/java/de/extio/game_engine/event/EventServiceTest.java +++ b/src/test/java/de/extio/game_engine/event/EventServiceTest.java @@ -107,6 +107,21 @@ class EventServiceTest { .untilAsserted(() -> assertThat(this.receivedEvents).isEmpty()); } + @Test + void testUnregisterAll() throws InterruptedException { + this.eventService.register(TestEvent.class, "consumer1", event -> this.receivedEvents.add(event)); + this.eventService.register(OtherTestEvent.class, "consumer1", event -> this.receivedEvents.add(event)); + + this.eventService.unregisterAll("consumer1"); + + this.eventService.fire(new TestEvent("test")); + this.eventService.fire(new OtherTestEvent("other")); + + await().pollDelay(Duration.ofMillis(50)) + .atMost(Duration.ofMillis(200)) + .untilAsserted(() -> assertThat(this.receivedEvents).isEmpty()); + } + @Test void testConsumerReregistration() throws InterruptedException { final var firstLatch = new CountDownLatch(1);