package org.limewire.rudp;
import java.net.InetSocketAddress;
import java.util.concurrent.Executor;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.limewire.concurrent.ExecutorsHelper;
import org.limewire.rudp.messages.RUDPMessage;
/**
* Dispatches messages.
*/
public class DefaultMessageDispatcher implements MessageDispatcher {
private static final Log LOG = LogFactory.getLog(DefaultMessageDispatcher.class);
private final Executor executor = ExecutorsHelper.newProcessingQueue("RUDPDispatch");
private volatile UDPMultiplexor multiplexor;
void setUDPMultiplexor(UDPMultiplexor plexor) {
if(multiplexor != null)
LOG.warn("Overriding old multiplexor!");
multiplexor = plexor;
}
public void dispatch(RUDPMessage message, InetSocketAddress from) {
executor.execute(new Dispatch(multiplexor, message, from));
}
private static class Dispatch implements Runnable {
private final UDPMultiplexor plexor;
private final RUDPMessage msg;
private final InetSocketAddress from;
Dispatch(UDPMultiplexor plexor, RUDPMessage msg, InetSocketAddress from) {
this.plexor = plexor;
this.msg = msg;
this.from = from;
}
public void run() {
plexor.routeMessage(msg, from);
}
}
}