@Override public void accept(Response response) { if (response.isFailed()) { String message = response.getBody() != null ? response.getBody().cast(ErrorResponse.class).getMessage() : "Unexpected error occurred."; future.completeExceptionally(new BackendException(message, response.getErrorCode())); } else { future.complete(response); } } }
public void offerResponse(Response response) { Consumer<Response> callback = correlationMap.get(response.getCorrelationId()); if (callback != null) { executionPool.execute(() -> { try { callback.accept(response); } finally { if (response.isLast()) { correlationMap.remove(response.getCorrelationId()); } } }); } else { logger.warn("Callback was not found for {}. Map size: {}, response: {}", response.getCorrelationId(), correlationMap.size(), response.getBody()); } }
private Response handleClientRequest(Request request) { Response response; try { response = Optional.ofNullable(requestHandler.handle(request)) .orElseThrow(() -> new NullPointerException("Response must not be null")); } catch (Exception e) { logger.error("Unexpected exception occurred during request handling (action='{}', handler='{}')", request.getBody().getAction().name(), requestHandler.getClass().getCanonicalName(), e); response = Response.newBuilder() .withLast(request.isSingleReplyExpected()) .buildFailed(500); } return response; }
CompletableFuture<Collection<DeviceNotification>> future = new CompletableFuture<>(); Consumer<Response> responseConsumer = response -> { Action resAction = response.getBody().getAction(); if (resAction.equals(Action.NOTIFICATION_SUBSCRIBE_RESPONSE)) { NotificationSubscribeResponse r = response.getBody().cast(NotificationSubscribeResponse.class); requestResponseMatcher.addSubscription(subscriptionId, response.getCorrelationId()); future.complete(r.getNotifications()); } else if (resAction.equals(Action.NOTIFICATION_EVENT)) { NotificationEvent event = response.getBody().cast(NotificationEvent.class); callback.accept(event.getNotification(), subscriptionId); } else {
public CompletableFuture<EntityCountResponse> count(CountPluginRequest countPluginRequest) { CompletableFuture<com.devicehive.shim.api.Response> future = new CompletableFuture<>(); rpcClient.call(Request .newBuilder() .withBody(countPluginRequest) .build(), new ResponseConsumer(future)); return future.thenApply(response -> new EntityCountResponse((CountResponse) response.getBody())); }
requestResponseMatcher.removeRequestCallback(request.getCorrelationId()); if (response != null && !response.isFailed()) { connected = true; break;
@Override public void onEvent(ServerEvent event) throws Exception { final Request request = event.get(); final String replyTo = request.getReplyTo(); Response response; switch (request.getType()) { case clientRequest: logger.debug("Client request received {}", request); response = handleClientRequest(request); break; case ping: logger.info("Ping request received from {}", replyTo); response = Response.newBuilder().buildSuccess(); break; default: logger.warn("Unknown type of request received {} from client with topic {}, correlationId = {}", request.getType(), replyTo, request.getCorrelationId()); response = Response.newBuilder() .buildFailed(404); } // set correlationId explicitly to prevent missing it in request response.setCorrelationId(request.getCorrelationId()); send(replyTo, response); }
@Override public void send(String replyTo, Response response) { responseProducer.send(new ProducerRecord<>(replyTo, response.getCorrelationId(), response)); } }
public Response buildFailed(int errorCode) { return new Response(body, correlationId, last, errorCode, true); }
public CompletableFuture<EntityCountResponse> count(CountUserRequest countUserRequest) { CompletableFuture<Response> future = new CompletableFuture<>(); rpcClient.call(Request .newBuilder() .withBody(countUserRequest) .build(), new ResponseConsumer(future)); return future.thenApply(response -> new EntityCountResponse((CountResponse)response.getBody())); }
requestResponseMatcher.removeRequestCallback(request.getCorrelationId()); if (response != null && !response.isFailed()) { connected = true; break;
CompletableFuture<Collection<DeviceCommand>> future = new CompletableFuture<>(); Consumer<Response> responseConsumer = response -> { Action resAction = response.getBody().getAction(); if (resAction.equals(Action.COMMAND_SUBSCRIBE_RESPONSE)) { future.complete(response.getBody().cast(CommandSubscribeResponse.class).getCommands()); requestResponseMatcher.addSubscription(subscriptionId, response.getCorrelationId()); } else if (!returnUpdated && resAction.equals(Action.COMMAND_EVENT)) { callback.accept(response.getBody().cast(CommandEvent.class).getCommand(), subscriptionId); } else if (returnUpdated && resAction.equals(Action.COMMANDS_UPDATE_EVENT)) { callback.accept(response.getBody().cast(CommandsUpdateEvent.class).getDeviceCommand(), subscriptionId); } else { logger.warn("Unknown action received from backend {}", resAction);
@Override public void onEvent(ServerEvent serverEvent) throws Exception { final Request request = serverEvent.get(); final String replyTo = request.getReplyTo(); Response response; switch (request.getType()) { case clientRequest: logger.debug("Client request received {}", request); response = handleClientRequest(request); break; case ping: logger.info("Ping request received from {}", replyTo); response = Response.newBuilder().buildSuccess(); break; default: logger.warn("Unknown type of request received {} from client with topic {}, correlationId = {}", request.getType(), replyTo, request.getCorrelationId()); response = Response.newBuilder() .buildFailed(404); } // set correlationId explicitly to prevent missing it in request response.setCorrelationId(request.getCorrelationId()); ProxyMessage responseMessage = ProxyMessageBuilder.notification(new NotificationCreatePayload(replyTo, gson.toJson(response))); proxyClient.push(responseMessage); }
public Response buildSuccess() { return new Response(body, correlationId, last, 0, false); }
public CompletableFuture<EntityCountResponse> count(CountNetworkRequest countNetworkRequest) { CompletableFuture<Response> future = new CompletableFuture<>(); rpcClient.call(Request .newBuilder() .withBody(countNetworkRequest) .build(), new ResponseConsumer(future)); return future.thenApply(response -> new EntityCountResponse((CountResponse)response.getBody())); }
@Override @SuppressWarnings("unchecked") public Response handle(Request request) { final Action action = request.getBody().getAction(); try { return Optional.ofNullable(requestHandlersMapper.requestHandlerMap().get(action)) .map(handler -> handler.handle(request)) .orElseThrow(() -> new RuntimeException("Action '" + action + "' is not supported.")); } catch (Exception e) { logger.error("Unable to handle request.", e); return Response.newBuilder() .withBody(new ErrorResponse(e.getMessage())) .withLast(true) .buildFailed(HttpStatus.INTERNAL_SERVER_ERROR.value()); } } }
requestResponseMatcher.removeRequestCallback(request.getCorrelationId()); if (response != null && !response.isFailed()) { connected = true; break;
public CompletableFuture<List<PluginVO>> list(ListPluginRequest listPluginRequest){ CompletableFuture<com.devicehive.shim.api.Response> future = new CompletableFuture<>(); rpcClient.call(Request .newBuilder() .withBody(listPluginRequest) .build(), new ResponseConsumer(future)); return future.thenApply(response -> ((ListPluginResponse) response.getBody()).getPlugins()); }
private Response handleClientRequest(Request request) { Response response; final Action action = request.getBody().getAction(); RequestHandler requestHandler = requestHandlersMapper.requestHandlerMap().get(action); if (requestHandler == null) { throw new RuntimeException("Action '" + action + "' is not supported."); } try { response = Optional.ofNullable(requestHandler.handle(request)) .orElseThrow(() -> new NullPointerException("Response must not be null")); } catch (Exception e) { logger.error("Unexpected exception occurred during request handling (action='{}', handler='{}')", request.getBody().getAction().name(), requestHandler.getClass().getCanonicalName(), e); response = Response.newBuilder() .withLast(request.isSingleReplyExpected()) .buildFailed(500); } return response; } }
requestResponseMatcher.removeRequestCallback(request.getCorrelationId()); if (response != null && !response.isFailed()) { connected = true; break;