@Override public void sendText(final String message) { puts("MESSAGE", message); final List<Message<Object>> messages = QBit.factory().createProtocolParser().parse("", message); if (messages.size() == 1) { responseCounter++; final Response<Object> response = (Response<Object>) messages.get(0); if (response.wasErrors()) { failureCounter++; } } }
public List<MethodCall<Object>> createMethodCallListToBeParsedFromBody( final String addressPrefix, final Object body, final Request<Object> originatingRequest) { List<MethodCall<Object>> methodCalls; if (body != null) { methodCalls = parserRef.get().parseMethodCalls(addressPrefix, body.toString()); } else { methodCalls = Collections.emptyList(); } if (methodCalls == null || methodCalls.size() == 0) { if (originatingRequest instanceof WebSocketMessage) { WebSocketMessage webSocketMessage = ((WebSocketMessage) originatingRequest); final Response<Object> response = ResponseImpl.response(-1, Timer.timer().now(), "SYSTEM", "ERROR", "CAN'T HANDLE CALL", originatingRequest, true); final WebSocketSender sender = webSocketMessage.getSender(); sender.sendText(encoderRef.get().encodeResponses("SYSTEM", Lists.list(response))); } return Collections.emptyList(); } //noinspection Convert2streamapi for (MethodCall<Object> methodCall : methodCalls) { if (methodCall instanceof MethodCallImpl) { MethodCallImpl method = ((MethodCallImpl) methodCall); method.originatingRequest(originatingRequest); } } return methodCalls; }
@Test public void testEncodeParseResponse() { BoonProtocolEncoder encoder = new BoonProtocolEncoder(); ResponseImpl<Object> response = new ResponseImpl<>(1L, 2L, "addr", "Raddr", null, "body", null, false); final String s = encoder.encodeResponses("Raddr", Lists.list(response)); ProtocolParser parser = new BoonProtocolParser(); final Response<Object> objectResponse = parser.parseResponses("", s).get(0); Assert.assertEquals(response.id(), objectResponse.id()); Assert.assertEquals(response.timestamp(), objectResponse.timestamp()); Assert.assertEquals(response.address(), objectResponse.address()); Assert.assertEquals(response.body(), objectResponse.body().toString()); Assert.assertEquals(response.returnAddress(), objectResponse.returnAddress()); }
private ProtocolParser selectProtocolParser(Object args, MultiMap<String, String> params) { for (ProtocolParser parser : protocolParserListRef.get()) { if (parser.supports(args, params)) { return parser; } } return null; }
public List<MethodCall<Object>> createMethodCallListToBeParsedFromBody( final String addressPrefix, final Object body, final Request<Object> originatingRequest) { List<MethodCall<Object>> methodCalls; if (body != null) { methodCalls = parserRef.get().parseMethodCallListUsingAddressPrefix(addressPrefix, body); } else { methodCalls = Collections.emptyList(); } if (methodCalls == null || methodCalls.size() == 0) { if (originatingRequest instanceof WebSocketMessage) { WebSocketMessage webSocketMessage = ((WebSocketMessage) originatingRequest); final Response<Object> response = ResponseImpl.response(-1, Timer.timer().now(), "SYSTEM", "ERROR", "CAN'T HANDLE CALL", originatingRequest, true); final WebSocketSender sender = webSocketMessage.getSender(); sender.sendText(encoderRef.get().encodeAsString(response)); } return Collections.emptyList(); } //noinspection Convert2streamapi for (MethodCall<Object> methodCall : methodCalls) { if (methodCall instanceof MethodCallImpl) { MethodCallImpl method = ((MethodCallImpl) methodCall); method.originatingRequest(originatingRequest); } } return methodCalls; }
@Override public MethodCall<Object> createMethodCallToBeParsedFromBody(String address, String returnAddress, String objectName, String methodName, Object body, MultiMap<String, String> params) { MethodCall<Object> parsedMethodCall = null; if (body != null) { ProtocolParser parser = selectProtocolParser(body, params); if (parser != null) { parsedMethodCall = parser.parseMethodCall(body); } else { parsedMethodCall = defaultProtocol.parseMethodCall(body); } } if (parsedMethodCall != null) { return parsedMethodCall; } MethodCallBuilder methodCallBuilder = new MethodCallBuilder(); methodCallBuilder.setName(methodName); methodCallBuilder.setBody(body); methodCallBuilder.setObjectName(objectName); methodCallBuilder.setAddress(address); methodCallBuilder.setReturnAddress(returnAddress); if (params != null) { methodCallBuilder.setParams(params); } methodCallBuilder.overridesFromParams(); return methodCallBuilder.build(); }
/** * Handles WebSocket messages and parses them into responses. * This does not handle batching or rather un-batching which we need for performance * we do handle batching in the parser/encoder. * * @param webSocketText websocket text */ private void handleWebSocketReplyMessage(final String webSocketText) { final List<Message<Object>> messages = QBit.factory().createProtocolParser().parse("", webSocketText); //noinspection Convert2streamapi for (Message<Object> message : messages) { if (message instanceof Response) { @SuppressWarnings("unchecked") final Response<Object> response = ((Response) message); final String[] split = StringScanner.split(response.returnAddress(), (char) PROTOCOL_ARG_SEPARATOR); final HandlerKey key = split.length == 2 ? new HandlerKey(split[1], response.id()) : new HandlerKey(split[0], response.id()); final Callback<Object> handler = handlers.get(key); if (handler != null) { handleAsyncCallback(response, handler); handlers.remove(key); } // else there was no handler, it was a one way method. } } }
@Override public void sendText(final String body) { httpSendWebSocketCalled.set(true); periodicFlushCallback.accept(null); final List<MethodCall<Object>> methodCalls = QBit.factory().createProtocolParser().parseMethodCalls("", body); serviceBundle.call(methodCalls); serviceBundle.flush(); Sys.sleep(100); if (response != null) { if (response.wasErrors()) { puts("FAILED RESPONSE", response); } else { String simulatedMessageFromServer = QBit.factory().createEncoder().encodeResponses("", Lists.list(response)); webSocket.onTextMessage(simulatedMessageFromServer); } } else { puts(response); } } };
/** * Handles WebSocket messages and parses them into responses. * This does not handle batching or rather un-batching which we need for performance * we do handle batching in the parser/encoder. * * @param webSocketText websocket text */ private void handleWebSocketReplyMessage(final String webSocketText) { final List<Message<Object>> messages = QBit.factory().createProtocolParser().parse("", webSocketText); //noinspection Convert2streamapi for (Message<Object> message : messages) { if (message instanceof Response) { @SuppressWarnings("unchecked") final Response<Object> response = ((Response) message); final String[] split = StringScanner.split(response.returnAddress(), (char) PROTOCOL_ARG_SEPARATOR); final HandlerKey key = split.length == 2 ? new HandlerKey(split[1], response.id()) : new HandlerKey(split[0], response.id()); final Callback<Object> handler = handlers.get(key); if (handler != null) { handleAsyncCallback(response, handler); handlers.remove(key); } // else there was no handler, it was a one way method. } } }
@Test public void testEncodeDecodeMap() { MultiMap<String, String> multiMap = new MultiMapImpl<>(ArrayList.class); multiMap.add("fruit", "apple"); multiMap.add("fruit", "pair"); multiMap.add("fruit", "watermelon"); multiMap.put("veggies", "yuck"); MethodCall<Object> method = new MethodCallBuilder().setName("foo").setBody("bar").setAddress("somebody").setParams(multiMap).build(); BoonProtocolEncoder encoder = new BoonProtocolEncoder(); final String s = encoder.encodeMethodCalls("", Lists.list(method)); puts(s); ProtocolParser parser = new BoonProtocolParser(); final MethodCall<Object> parse = parser.parseMethodCalls("", s).get(0); final List<String> fruit = (List<String>) parse.params().getAll("fruit"); Assert.assertEquals(Lists.list("apple", "pair", "watermelon"), fruit); Assert.assertEquals("yuck", parse.params().get("veggies")); }
/** * Handles WebSocket messages and parses them into responses. * This does not handle batching or rather un-batching which we need for performance * we do handle batching in the parser/encoder. * * @param webSocketText websocket text */ private void handleWebSocketReplyMessage(final String webSocketText) { final List<Message<Object>> messages = QBit.factory().createProtocolParser().parse("", webSocketText); //noinspection Convert2streamapi for (Message<Object> message : messages) { if (message instanceof Response) { @SuppressWarnings("unchecked") final Response<Object> response = ((Response) message); final String[] split = StringScanner.split(response.returnAddress(), (char) PROTOCOL_ARG_SEPARATOR); final HandlerKey key = split.length == 2 ? new HandlerKey(split[1], response.id()) : new HandlerKey(split[0], response.id()); final Callback<Object> handler = handlers.get(key); if (handler != null) { handleAsyncCallback(response, handler); handlers.remove(key); } // else there was no handler, it was a one way method. } } }
public List<MethodCall<Object>> createMethodCallListToBeParsedFromBody( final String addressPrefix, final Object body, final Request<Object> originatingRequest) { List<MethodCall<Object>> methodCalls; if (body != null) { methodCalls = parserRef.get().parseMethodCalls(addressPrefix, body.toString()); } else { methodCalls = Collections.emptyList(); } if (methodCalls == null || methodCalls.size() == 0) { if (originatingRequest instanceof WebSocketMessage) { WebSocketMessage webSocketMessage = ((WebSocketMessage) originatingRequest); final Response<Object> response = ResponseImpl.response(-1, Timer.timer().now(), "SYSTEM", "ERROR", "CAN'T HANDLE CALL", originatingRequest, true); final WebSocketSender sender = webSocketMessage.getSender(); sender.sendText(encoderRef.get().encodeResponses("SYSTEM", Lists.list(response))); } return Collections.emptyList(); } //noinspection Convert2streamapi for (MethodCall<Object> methodCall : methodCalls) { if (methodCall instanceof MethodCallImpl) { MethodCallImpl method = ((MethodCallImpl) methodCall); method.originatingRequest(originatingRequest); } } return methodCalls; }