2.9.2.1. Message Dispatcher Building Block
public class MessageDispatcher implements ... {
// Message dispatcher needs channel for communication and request handler for message delivery.
public MessageDispatcher (JChannel channel) { ... }
public MessageDispatcher (JChannel channel, RequestHandler req_handler) { ... }
// Casting sends to multiple destinations or all members when none specified.
public <T> RspList<T> castMessage (final Collection<Address> dests, Message msg, RequestOptions opts) { ... }
public <T> CompletableFuture<RspList<T>> castMessageWithFuture (final Collection<Address> dests, Message msg, RequestOptions opts) { ... }
// Sending sends to single destination.
public <T> T sendMessage (Message msg, RequestOptions opts) { ... }
public <T> CompletableFuture<T> sendMessageWithFuture (Message msg, RequestOptions opts) { ... }
// Request handler interface if none provided externally.
@Override public Object handle (Message msg) { ... }
@Override public void handle (Message request, Response response) { ... }
...
}
public class RequestOptions {
// Can wait for none, one or all responses.
public ResponseMode getMode () { ... }
public RequestOptions setMode (ResponseMode mode) { ... }
// Can specify response filter if response expected.
public RspFilter getRspFilter () { ... }
public RequestOptions setRspFilter (RspFilter filter) { ... }
// Can specify response timeout if response expected.
public long getTimeout () { ... }
public RequestOptions setTimeout (long timeout) { ... }
...
}
public class RspList<T> extends HashMap<Address,Rsp<T>> implements Iterable<Rsp<T>> {
public int numReceived () { ... }
public boolean isReceived (Address sender) { ... }
// Standard get inherited.
public T getFirst () { ... }
public List<T> getResults () { ... }
// Response is not expected from failed members.
public int numSuspectedMembers () { ... }
public List<Address> getSuspectedMembers () { ... }
public boolean isSuspected (Address sender) { ... }
...
}