feat(event): Enhance event registration to support generic event consumers
This commit is contained in:
@@ -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);
|
||||
}));
|
||||
}
|
||||
|
||||
|
||||
@@ -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) {
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user