* @return The future response to keep track of future events
*/
public FutureResponse sendTask(final PeerAddress remotePeer, ChannelCreator channelCreator, Number160 taskID,
Map<Number160, Data> dataMap, Worker mapper, KeyPair keyPair, boolean forceUDP, boolean sign) {
final Message message = createMessage(remotePeer, Command.TASK, Type.REQUEST_1);
FutureResponse futureResponse = new FutureResponse(message);
try {
byte[] me = Utils.encodeJavaObject(mapper);
ChannelBuffer payload = ChannelBuffers.wrappedBuffer(me);
message.setPayload(payload);
message.setDataMap(dataMap);
message.setKey(taskID);
if (sign) {
message.setPublicKeyAndSign(keyPair);
}
if (forceUDP) {
final RequestHandler<FutureResponse> requestHandler = new RequestHandler<FutureResponse>(
futureResponse, getPeerBean(), getConnectionBean(), message);
if (logger.isDebugEnabled()) {
logger.debug("send Task " + message);
}
return requestHandler.sendUDP(channelCreator);
} else {
final RequestHandlerTCP<FutureResponse> requestHandler = new RequestHandlerTCP<FutureResponse>(
futureResponse, getPeerBean(), getConnectionBean(), message);
if (logger.isDebugEnabled()) {
logger.debug("send Task " + message);
}
return requestHandler.sendTCP(channelCreator);
}
} catch (IOException ioe) {
futureResponse.setFailed(ioe.toString());
if (logger.isErrorEnabled()) {
ioe.printStackTrace();
}
return futureResponse;
}