package org.limewire.listener;
import java.util.concurrent.Executor;
import org.limewire.listener.EventListenerList.EventListenerListContext;
import org.limewire.logging.Log;
public class AsynchronousMulticasterImpl<E> implements EventMulticaster<E>, AsynchronousEventMulticaster<E> {
private final EventListenerList<E> listeners;
private final Executor executor;
public AsynchronousMulticasterImpl(Executor executor) {
this.listeners = new EventListenerList<E>();
this.executor = executor;
}
public AsynchronousMulticasterImpl(Executor executor, Class loggerKey) {
this.listeners = new EventListenerList<E>(loggerKey);
this.executor = executor;
}
public AsynchronousMulticasterImpl(Executor executor, Log log) {
this.listeners = new EventListenerList<E>(log);
this.executor = executor;
}
public EventListenerListContext getListenerContext() {
return listeners.getContext();
}
@Override
public void addListener(EventListener<E> listener) {
listeners.addListener(listener);
}
@Override
public boolean removeListener(EventListener<E> listener) {
return listeners.removeListener(listener);
}
@Override
public void handleEvent(E event) {
broadcast(event);
}
@Override
public void broadcast(final E event) {
executor.execute(new Runnable() {
@Override
public void run() {
listeners.broadcast(event);
}
});
}
}