package org.jgroups.blocks.mux;
import java.util.Collection;
import org.jgroups.Address;
import org.jgroups.Message;
import org.jgroups.blocks.RequestCorrelator;
import org.jgroups.blocks.RequestHandler;
import org.jgroups.blocks.RspCollector;
import org.jgroups.blocks.RequestOptions;
import org.jgroups.conf.ClassConfigurator;
import org.jgroups.stack.Protocol;
/**
* A request correlator that adds a mux header to incoming and outgoing messages.
* @author Bela Ban
* @author Paul Ferraro
* @author Brian Stansberry
*/
public class MuxRequestCorrelator extends RequestCorrelator {
protected final static short MUX_ID = ClassConfigurator.getProtocolId(MuxRequestCorrelator.class);
private final org.jgroups.Header header;
public MuxRequestCorrelator(short id, Protocol transport, RequestHandler handler, Address localAddr) {
super(ClassConfigurator.getProtocolId(RequestCorrelator.class), transport, handler, localAddr);
this.header = new MuxHeader(id);
}
@Override
public void sendRequest(long requestId, Collection<Address> dest_mbrs, Message msg, RspCollector coll, RequestOptions options) throws Exception {
msg.putHeader(MUX_ID, header);
super.sendRequest(requestId, dest_mbrs, msg, coll, options);
}
@Override
public void sendUnicastRequest(long id, Address target, Message msg, RspCollector coll) throws Exception {
msg.putHeader(MUX_ID, header);
super.sendUnicastRequest(id, target, msg, coll);
}
@Override
protected void prepareResponse(Message rsp) {
rsp.putHeader(MUX_ID, header);
super.prepareResponse(rsp);
}
}