Broadcast events asynchronously.

This commit is contained in:
akwizgran
2018-11-07 13:26:00 +00:00
parent 8b3164e107
commit c3b5b04b71
15 changed files with 104 additions and 8 deletions

View File

@@ -16,7 +16,8 @@ public interface EventBus {
void removeListener(EventListener l);
/**
* Notifies all listeners of an event.
* Asynchronously notifies all listeners of an event. Listeners are
* notified on the {@link EventExecutor}.
*/
void broadcast(Event e);
}

View File

@@ -0,0 +1,25 @@
package org.briarproject.bramble.api.event;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
import javax.inject.Qualifier;
import static java.lang.annotation.ElementType.FIELD;
import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.ElementType.PARAMETER;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
/**
* Annotation for injecting the executor for broadcasting events. Also used for
* annotating methods that should run on the event executor.
* <p>
* The contract of this executor is that tasks are run in the order they're
* submitted, tasks are not run concurrently, and submitting a task will never
* block. Tasks must not block. Tasks submitted during shutdown are discarded.
*/
@Qualifier
@Target({FIELD, METHOD, PARAMETER})
@Retention(RUNTIME)
public @interface EventExecutor {
}

View File

@@ -12,5 +12,6 @@ public interface EventListener {
* Called when an event is broadcast. Implementations of this method must
* not block.
*/
@EventExecutor
void eventOccurred(Event e);
}