@Override @SuppressWarnings("unchecked") public void handleWebSocketReceive(String connectionId, Object data) { Map<String, Object> message = (Map<String, Object>) data; String command = (String) message.get(MasterApiMessage.MASTER_API_MESSAGE_ENVELOPE_TYPE); Map<String, Object> commandArgs = (Map<String, Object>) message.get(MasterApiMessage.MASTER_API_MESSAGE_ENVELOPE_DATA); String requestId = (String) message.get(MasterApiMessage.MASTER_API_MESSAGE_ENVELOPE_REQUEST_ID); try { if (command.startsWith(MasterApiMessage.MASTER_API_COMMAND_EXTENSION_PREFIX)) { String extensionName = command.substring(MasterApiMessage.MASTER_API_COMMAND_EXTENSION_PREFIX.length()); Map<String, Object> responseMessage = extensionManager.evaluateApiExtension(extensionName, commandArgs); responseMessage.put("command", command); responseMessage.put( MasterApiMessage.MASTER_API_MESSAGE_ENVELOPE_TYPE, MasterApiMessage.MASTER_API_MESSAGE_TYPE_COMMAND_RESPONSE); potentiallyAddRequestId(responseMessage, requestId); webSocketFactory.sendJson(connectionId, responseMessage); } else { MasterApiWebSocketCommandHandler handler = commandHandlers.get(command); if (handler != null) { Map<String, Object> responseMessage = handler.execute(commandArgs); responseMessage.put( MasterApiMessage.MASTER_API_MESSAGE_ENVELOPE_TYPE, MasterApiMessage.MASTER_API_MESSAGE_TYPE_COMMAND_RESPONSE); potentiallyAddRequestId(responseMessage, requestId); webSocketFactory.sendJson(connectionId, responseMessage); } else { spaceEnvironment .getLog() .error( String.format("Master API websocket connection got unknown command %s", command)); } } } catch (Exception e) { spaceEnvironment .getLog() .error( String.format("Error while performing Master API websocket command %s", command), e); } }
/** * Register a command handler with the manager. * * @param handler the command handler */ private void registerMasterApiHandler(MasterApiWebSocketCommandHandler handler) { commandHandlers.put(handler.getCommandName(), handler); }