package ws.wamplay.controllers.messageHandlers; import java.util.ArrayList; import java.util.List; import com.fasterxml.jackson.databind.JsonNode; import ws.wamplay.callbacks.RPCCallback; import ws.wamplay.models.RPC; import ws.wamplay.models.WAMPlayClient; import ws.wamplay.models.messages.CallError; import ws.wamplay.models.messages.CallResult; public class RPCHandler implements MessageHandler{ @Override public void process(WAMPlayClient client, JsonNode message) { String callID = message.get(1).asText(); String procURI = message.get(2).asText(); List<JsonNode> args = new ArrayList<JsonNode>(); for (int i = 3; i < message.size(); i++) { args.add(message.get(i)); } RPCCallback cb = RPC.getCallback(procURI); if (cb == null) { client.send(new CallError(callID, procURI, "404", "RPC method not found!").toJson()); return; } try { JsonNode response = cb.call(client.getSessionID(), args.toArray(new JsonNode[args.size()])); client.send(new CallResult(callID, response).toJson()); } catch (IllegalArgumentException e) { CallError resp; if (e.getMessage() == null) { resp = new CallError(callID, procURI, "400"); } else { resp = new CallError(callID, procURI, "400", e.getMessage()); } client.send(resp.toJson()); } catch (Throwable e) { CallError resp = new CallError(callID, procURI, "500", e.toString()); client.send(resp.toJson()); } } }