feat(event): Enhance event registration to support generic event consumers

This commit is contained in:
extio-de
2025-12-25 10:34:13 +01:00
parent 4a17cea843
commit dfb5fa09f9
4 changed files with 7 additions and 6 deletions

View File

@@ -10,6 +10,7 @@ import java.util.concurrent.StructuredTaskScope.FailedException;
import java.util.concurrent.StructuredTaskScope.Joiner; import java.util.concurrent.StructuredTaskScope.Joiner;
import java.util.concurrent.StructuredTaskScope.Subtask; import java.util.concurrent.StructuredTaskScope.Subtask;
import java.util.concurrent.StructuredTaskScope.Subtask.State; import java.util.concurrent.StructuredTaskScope.Subtask.State;
import java.util.function.Consumer;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
@@ -57,7 +58,7 @@ public class EventExecutor {
case 1: case 1:
try { try {
consumers.getFirst().consumer().accept(event); ((Consumer<Event>) consumers.getFirst().consumer()).accept(event);
} }
catch (final NoSuchElementException e) { catch (final NoSuchElementException e) {
return; return;
@@ -72,7 +73,7 @@ public class EventExecutor {
tasks.clear(); tasks.clear();
for (final var consumer : consumers) { for (final var consumer : consumers) {
tasks.add(scope.fork(() -> { tasks.add(scope.fork(() -> {
consumer.consumer().accept(event); ((Consumer<Event>) consumer.consumer()).accept(event);
})); }));
} }

View File

@@ -10,7 +10,7 @@ public class EventHandlerRegistry {
private final ConcurrentMap<Class<? extends Event>, List<EventConsumer>> handlers = new ConcurrentHashMap<>(); private final ConcurrentMap<Class<? extends Event>, List<EventConsumer>> handlers = new ConcurrentHashMap<>();
public void register(final Class<? extends Event> eventClass, final String consumerId, final Consumer<Event> consumer) { public <T extends Event> void register(final Class<T> eventClass, final String consumerId, final Consumer<T> consumer) {
final var eventConsumers = this.handlers.computeIfAbsent(eventClass, k -> new CopyOnWriteArrayList<>()); final var eventConsumers = this.handlers.computeIfAbsent(eventClass, k -> new CopyOnWriteArrayList<>());
eventConsumers.removeIf(ec -> ec.id().equals(consumerId)); eventConsumers.removeIf(ec -> ec.id().equals(consumerId));
eventConsumers.add(new EventConsumer(consumerId, consumer)); eventConsumers.add(new EventConsumer(consumerId, consumer));
@@ -27,6 +27,6 @@ public class EventHandlerRegistry {
return this.handlers.get(eventClass); return this.handlers.get(eventClass);
} }
record EventConsumer(String id, Consumer<Event> consumer) { record EventConsumer(String id, Consumer<? extends Event> consumer) {
} }
} }

View File

@@ -4,7 +4,7 @@ import java.util.function.Consumer;
public interface EventService { public interface EventService {
void register(Class<? extends Event> eventClass, String consumerId, Consumer<Event> consumer); <T extends Event> void register(Class<T> eventClass, String consumerId, Consumer<T> consumer);
void unregister(Class<? extends Event> eventClass, String consumerId); void unregister(Class<? extends Event> eventClass, String consumerId);

View File

@@ -13,7 +13,7 @@ public class EventServiceImpl implements EventService {
} }
@Override @Override
public void register(final Class<? extends Event> eventClass, final String consumerId, final Consumer<Event> consumer) { public <T extends Event> void register(final Class<T> eventClass, final String consumerId, final Consumer<T> consumer) {
this.registry.register(eventClass, consumerId, consumer); this.registry.register(eventClass, consumerId, consumer);
} }