signalData[0] = request;
signalData[1] = params;
signalAgent(new AgentSignal<Object[]>(
AgentSignal.INVOKE, signalData));
final JSONResponse response = JSONRPC.invoke(me,
request, params, me);
signalAgent(new AgentSignal<JSONResponse>(
AgentSignal.RESPOND, response));
try {
send(response, senderUrl, null, tag);
} catch (final IOException e) {
LOG.log(Level.WARNING, getId()
+ ": Failed to send response.", e);
}
}
});
} else if (jsonMsg instanceof JSONResponse && callbacks != null
&& id != null && !id.isNull()) {
final JSONResponse response = (JSONResponse) jsonMsg;
final AsyncCallback<JSONResponse> callback = callbacks.pull(id);
if (callback != null) {
host.getPool().execute(new Runnable() {
@Override
public void run() {
signalAgent(new AgentSignal<JSONResponse>(
AgentSignal.RESPONSE, response));
if (response.getError() != null) {
callback.onFailure(response.getError());
} else {
callback.onSuccess(response);
}
}
});
}
}
} else {
LOG.log(Level.WARNING, getId()
+ ": Received non-JSON message:'" + msg + "'");
}
} catch (final Exception e) {
LOG.log(Level.WARNING, "Exception in receiving message", e);
// generate JSON error response, skipped if it was an incoming
// notification i.s.o. request.
final JSONRPCException jsonError = new JSONRPCException(
JSONRPCException.CODE.INTERNAL_ERROR, e.getMessage(), e);
final JSONResponse response = new JSONResponse(jsonError);
response.setId(id);
signalAgent(new AgentSignal<JSONResponse>(AgentSignal.EXCEPTION,
response));
try {
send(response, senderUrl, null, tag);
} catch (final Exception e1) {