package ninja.ugly.prevail.event.dispatcher; import java.util.concurrent.Executor; /** * An implementation of the EventDispatcher interface that performs all operations on * a background executor. */ public class ExecutorEventDispatcher implements EventDispatcher { private final EventDispatcher mEventDispatcher; private final Executor mExecutor; /** * Constructs an ExecutorEventDispatcher wrapping the given EventBus and performing * all operations (dispatching events, registering and unregistering subscribers) on the * given Executor. * @param eventDispatcher The EventDispatcher to wrap * @param executor The Executor to be used for operating on the given EventDispatcher. */ public ExecutorEventDispatcher(final EventDispatcher eventDispatcher, final Executor executor) { mEventDispatcher = eventDispatcher; mExecutor = executor; } @Override public void dispatchEvent(final Object event) { mExecutor.execute(new Runnable() { @Override public void run() { mEventDispatcher.dispatchEvent(event); } }); } @Override public void register(final Object subscriber) { mExecutor.execute(new Runnable() { @Override public void run() { mEventDispatcher.register(subscriber); } }); } @Override public void unregister(final Object subscriber) { mExecutor.execute(new Runnable() { @Override public void run() { mEventDispatcher.unregister(subscriber); } }); } }