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);