@Override public void call(List<MethodCall<Object>> methodCalls) { if (methodCalls.size() > 0) { String returnAddress = methodCalls.get(0).returnAddress(); sender.send(returnAddress, encoder.encodeMethodCalls(methodCalls.get(0).returnAddress(), methodCalls), e -> { methodCalls.forEach(mc -> { if (mc.callback() != null) { mc.callback().onError(e); } }); }); } }
private void buildAndSendResponse(final Response<Object> response, long now) { if (outputMessages.size() == 0 && response == null) { return; } String returnAddress = response != null ? response.returnAddress() : null; List<Response<Object>> messages = new ArrayList<>(outputMessages.size() + 1); Response<Object> currentMessage = outputMessages.poll(); while (currentMessage != null) { returnAddress = currentMessage.returnAddress(); messages.add(currentMessage); currentMessage = outputMessages.poll(); } if (response != null) { messages.add(response); } if (returnAddress != null) { final String returnAddr = returnAddress; protocolEncoderThreadPool.execute(() -> { @SuppressWarnings("unchecked") final String textMessage = encoderRef.get().encodeResponses(returnAddr, messages); serverWebSocket.getSender().sendText(textMessage); }); } lastSend = now; }
@Override public void call(List<MethodCall<Object>> methodCalls) { if (methodCalls.size() > 0) { String returnAddress = methodCalls.get(0).returnAddress(); @SuppressWarnings("unchecked") List<Message<Object>> methods = (List<Message<Object>>) (Object) methodCalls; sender.send(returnAddress, encoder.encodeAsString(methods)); } }
@Override public void flush() { if (methodCalls.size() > 0) { Message<Object> method; List<Message<Object>> methods; methods = new ArrayList<>(methodCalls.size()); do { method = methodCalls.poll(); methods.add(method); }while (method!=null); if (methods.size() > 0) { sender.send(((MethodCall<Object>) methods.get(0)).returnAddress(), encoder.encodeAsString(methods)); } } }
@Override public void call(List<MethodCall<Object>> methodCalls) { if (methodCalls.size() > 0) { String returnAddress = methodCalls.get(0).returnAddress(); sender.send(returnAddress, encoder.encodeMethodCalls(methodCalls.get(0).returnAddress(), methodCalls), e -> { methodCalls.forEach(mc -> { if (mc.callback() != null) { mc.callback().onError(e); } }); }); } }
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; }
private void buildAndSendMessages(final Response<Object> message, long now) { if (outputMessages.size() == 0 && message == null) { return; } List<Response<Object>> messages = new ArrayList<>(outputMessages.size() + 1); Response<Object> currentMessage = outputMessages.poll(); while (currentMessage != null) { messages.add(currentMessage); currentMessage = outputMessages.poll(); } if (message != null) { messages.add(message); } protocolEncoderThreadPool.execute(() -> { @SuppressWarnings("unchecked") final String textMessage = encoderRef.get().encodeAsString((Collection<Message<Object>>) (Object) messages); serverWebSocket.getSender().sendText(textMessage); }); lastSend = now; }
@Test public void testExceptionCallWebSocket() throws Exception { final MethodCall<Object> methodCall = new MethodCallBuilder() .setObjectName("serviceMockObject").setName("exceptionCall").setBody(null).build(); final String message = QBit.factory().createEncoder().encodeMethodCalls("", Lists.list(methodCall)); httpServer.sendWebSocketServerMessage(new WebSocketMessageBuilder().setRemoteAddress("/error").setMessage(message).setSender(new MockWebSocketSender()).build()); Sys.sleep(5); serviceServerImpl.flush(); Sys.sleep(5); waitForTrigger(20, o -> callMeCounter == 1 && failureCounter == 1); ok |= failureCounter == 1 || die(); ok |= callMeCounter == 1 || die(); }
@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); } } };
public void handleResponseFromServiceBundleToWebSocketSender( final Response<Object> response, final WebSocketMessage originatingRequest) { //noinspection UnnecessaryLocalVariable @SuppressWarnings("UnnecessaryLocalVariable") final WebSocketMessage webSocketMessage = originatingRequest; try { //uts("handle WebSocket response", webSocketMessage.getRemoteAddress()); final WebSocketDelegate webSocketDelegate = this.webSocketDelegateMap.get(webSocketMessage.getRemoteAddress()); if (webSocketDelegate == null) { String responseAsText = encoderRef.get().encodeAsString(response); webSocketMessage.getSender().sendText(responseAsText); } else { webSocketDelegate.send(response); } } catch (Exception ex) { logger.warn("websocket unable to sendText response", ex); } }
@Test public void testWebSocketCall() throws Exception { final MethodCall<Object> methodCall = new MethodCallBuilder().setObjectName("serviceMockObject").setName("callWithReturn").setBody(null) .build(); final String message = QBit.factory().createEncoder().encodeMethodCalls("", Lists.list(methodCall)); httpServer.sendWebSocketServerMessage(new WebSocketMessageBuilder().setRemoteAddress("/foo").setMessage(message).setSender(new MockWebSocketSender()).build()); Sys.sleep(10); serviceServerImpl.flush(); Sys.sleep(10); waitForTrigger(20, o -> responseCounter == 1); Sys.sleep(10); ok |= responseCounter == 1 || die(); ok |= failureCounter == 0 || die(); }
private void buildAndSendResponse(final Response<Object> response, long now) { if (outputMessages.size() == 0 && response == null) { return; } String returnAddress = response != null ? response.returnAddress() : null; List<Response<Object>> messages = new ArrayList<>(outputMessages.size() + 1); Response<Object> currentMessage = outputMessages.poll(); while (currentMessage != null) { returnAddress = currentMessage.returnAddress(); messages.add(currentMessage); currentMessage = outputMessages.poll(); } if (response != null) { messages.add(response); } if (returnAddress != null) { final String returnAddr = returnAddress; protocolEncoderThreadPool.execute(() -> { @SuppressWarnings("unchecked") final String textMessage = encoderRef.get().encodeResponses(returnAddr, messages); serverWebSocket.getSender().sendText(textMessage); }); } lastSend = now; }
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; }
@Test public void testWebSocketCallWithServiceQueue() throws Exception { final Factory factory = QBit.factory(); final ProtocolParser protocolParser = factory.createProtocolParser(); final ProtocolEncoder encoder = factory.createEncoder(); final Queue<Response<Object>> responseQueue = QueueBuilder.queueBuilder().setName("RESPONSE QUEUE").build(); final ServiceBundle serviceBundle = new ServiceBundleBuilder() .setResponseQueue(responseQueue).setAddress("/services").build(); final JsonMapper mapper = factory.createJsonMapper(); httpServer = new HttpServerMock(); serviceServerImpl = new ServiceEndpointServerImpl(httpServer, encoder, protocolParser, serviceBundle, mapper, 1, 100, 30, 10, null, null, null, null, null, "localhost", 8080, 0, null, null, 50, 2, 2); callMeCounter = 0; responseCounter = 0; ServiceQueue serviceQueue = serviceBuilder() .setResponseQueue(responseQueue) .setServiceObject(new MyOtherService()).buildAndStart(); serviceServerImpl.addServiceQueue("other", serviceQueue); serviceServerImpl.start(); final MethodCall<Object> methodCall = new MethodCallBuilder().setObjectName("other").setName("method").setBody(null).build(); final String message = QBit.factory().createEncoder().encodeMethodCalls("", Lists.list(methodCall)); httpServer.sendWebSocketServerMessage(new WebSocketMessageBuilder().setRemoteAddress("/foo") .setMessage(message).setSender(new MockWebSocketSender()).build()); Sys.sleep(100); waitForTrigger(20, o -> responseCounter == 1); Sys.sleep(10); ok |= responseCounter == 1 || die(); ok |= failureCounter == 0 || die(); }
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; }