}
public FutureAsyncTask submit(final PeerAddress remotePeer, ChannelCreator channelCreator, final Number160 taskId,
Map<Number160, Data> dataMap, Worker mapper, boolean forceUDP, boolean sign) {
final Number320 taskKey = new Number320(taskId, remotePeer.getPeerId());
final FutureAsyncTask futureAsyncTask = new FutureAsyncTask(remotePeer);
futureAsyncTask.addCancellation(new Cancel() {
@Override
public void cancel() {
taskFailed(taskKey);
}
});
tasks.put(taskKey, futureAsyncTask);
FutureResponse futureResponse = taskRPC.sendTask(remotePeer, channelCreator, taskId, dataMap, mapper,
peerBean.getKeyPair(), forceUDP, sign);
futureResponse.addListener(new BaseFutureAdapter<FutureResponse>() {
@Override
public void operationComplete(FutureResponse future) throws Exception {
if (future.isSuccess()) {
// keep track of it and poll to see if its still alive
scheduler.keepTrack(remotePeer, taskId, (TaskResultListener) AsyncTask.this);
} else {
futureAsyncTask.setFailed(future);
}
}
});
return futureAsyncTask;
}