}
@Override
public void onReceive(Object message) {
if (message instanceof TaskRequest) {
TaskRequest request = (TaskRequest) message;
if (isCompleted) {
if (isCompletedSuccess) {
reply(result);
}
} else {
TaskListener listener = new TaskListener(request.getRequestId(), sender());
requests.add(listener);
}
} else if (message instanceof TaskCancel) {
if (isCompleted) {
return;
}
TaskCancel cancel = (TaskCancel) message;
TaskListener listener = new TaskListener(cancel.getRequestId(), sender());
requests.remove(listener);
if (requests.size() == 0) {
onTaskObsolete();
context().stopSelf();
}
} else if (message instanceof Result) {
if (!isCompleted) {
Result res = (Result) message;
isCompleted = true;
isCompletedSuccess = true;
result = (T) res.getRes();
for (TaskListener request : requests) {
request.getSender().send(new TaskResult<T>(request.getRequestId(), result));
}
self().send(PoisonPill.INSTANCE, dieTimeout);
}
} else if (message instanceof Error) {
if (!isCompleted) {
isCompleted = true;
Error error = (Error) message;
for (TaskListener request : requests) {
request.getSender().send(new TaskError(request.getRequestId(), error.getError()));
}
context().stopSelf();
}
}
}