Skip to content

Commit

Permalink
Add an option to specify identity for subscriber; Add an option to pu…
Browse files Browse the repository at this point in the history
…blish event only for specified targets
  • Loading branch information
shitzuu committed Aug 24, 2024
1 parent 5a4c32a commit 90cc475
Show file tree
Hide file tree
Showing 4 changed files with 24 additions and 38 deletions.
33 changes: 0 additions & 33 deletions dew-common/src/dev/shiza/dew/Dew.java

This file was deleted.

2 changes: 1 addition & 1 deletion dew-common/src/dev/shiza/dew/event/EventBus.java
Original file line number Diff line number Diff line change
Expand Up @@ -12,5 +12,5 @@ static EventBus create(final SubscriptionFacade subscriptionFacade) {

void subscribe(final Subscriber subscriber) throws SubscribingException;

void publish(final Event event) throws EventPublishingException;
void publish(final Event event, final String... targets) throws EventPublishingException;
}
20 changes: 17 additions & 3 deletions dew-common/src/dev/shiza/dew/event/EventBusImpl.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import dev.shiza.dew.subscription.Subscription;
import dev.shiza.dew.subscription.SubscriptionFacade;
import java.lang.invoke.MethodHandle;
import java.util.Arrays;
import java.util.Set;

final class EventBusImpl implements EventBus {
Expand All @@ -20,16 +21,21 @@ public void subscribe(final Subscriber subscriber) {
}

@Override
public void publish(final Event event) {
public void publish(final Event event, final String... targets) {
final Set<Subscription> subscriptions =
subscriptionFacade.getSubscriptionsByEventType(event.getClass());
for (final Subscription subscription : subscriptions) {
notifySubscription(subscription, event);
notifySubscription(subscription, event, targets);
}
}

private void notifySubscription(final Subscription subscription, final Event event) {
private void notifySubscription(
final Subscription subscription, final Event event, final String[] targets) {
final Subscriber subscriber = subscription.subscriber();
if (hasSpecifiedTarget(targets) && isExcludedSubscription(subscriber, targets)) {
return;
}

for (final MethodHandle invocation : subscription.invocations()) {
notifySubscribedMethods(invocation, subscriber, event);
}
Expand All @@ -45,4 +51,12 @@ private void notifySubscribedMethods(
exception);
}
}

private boolean hasSpecifiedTarget(final String[] targets) {
return targets.length > 0;
}

private boolean isExcludedSubscription(final Subscriber subscriber, final String[] targets) {
return Arrays.stream(targets).noneMatch(identity -> subscriber.identity().equals(identity));
}
}
7 changes: 6 additions & 1 deletion dew-common/src/dev/shiza/dew/subscription/Subscriber.java
Original file line number Diff line number Diff line change
@@ -1,3 +1,8 @@
package dev.shiza.dew.subscription;

public interface Subscriber {}
public interface Subscriber {

default String identity() {
return null;
}
}

0 comments on commit 90cc475

Please sign in to comment.