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.Subtask;
import java.util.concurrent.StructuredTaskScope.Subtask.State;
import java.util.function.Consumer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -57,7 +58,7 @@ public class EventExecutor {
case 1:
try {
consumers.getFirst().consumer().accept(event);
((Consumer<Event>) consumers.getFirst().consumer()).accept(event);
}
catch (final NoSuchElementException e) {
return;
@@ -72,7 +73,7 @@ public class EventExecutor {
tasks.clear();
for (final var consumer : consumers) {
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<>();
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<>());
eventConsumers.removeIf(ec -> ec.id().equals(consumerId));
eventConsumers.add(new EventConsumer(consumerId, consumer));
@@ -27,6 +27,6 @@ public class EventHandlerRegistry {
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 {
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);

View File

@@ -13,7 +13,7 @@ public class EventServiceImpl implements EventService {
}
@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);
}