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);
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 {
public CompletableFuture<Set<Long>> sendUnsubscribeRequest(Set<Long> subIds) { CommandUnsubscribeRequest unsubscribeRequest = new CommandUnsubscribeRequest(subIds); Request request = Request.newBuilder() .withBody(unsubscribeRequest) .build(); CompletableFuture<Set<Long>> future = new CompletableFuture<>(); Consumer<Response> responseConsumer = response -> { Action resAction = response.getBody().getAction(); if (resAction.equals(Action.COMMAND_UNSUBSCRIBE_RESPONSE)) { future.complete(response.getBody().cast(CommandUnsubscribeResponse.class).getSubscriptionIds()); subIds.forEach(requestResponseMatcher::removeSubscription); } else { logger.warn("Unknown action received from backend {}", resAction); } }; rpcClient.call(request, responseConsumer); return future; }
public CompletableFuture<Set<Long>> unsubscribe(Set<Long> subIds) { NotificationUnsubscribeRequest unsubscribeRequest = new NotificationUnsubscribeRequest(subIds); Request request = Request.newBuilder() .withBody(unsubscribeRequest) .build(); CompletableFuture<Set<Long>> future = new CompletableFuture<>(); Consumer<Response> responseConsumer = response -> { Action resAction = response.getBody().getAction(); if (resAction.equals(Action.NOTIFICATION_UNSUBSCRIBE_RESPONSE)) { future.complete(response.getBody().cast(NotificationUnsubscribeResponse.class).getSubscriptionIds()); subIds.forEach(requestResponseMatcher::removeSubscription); } else { logger.warn("Unknown action received from backend {}", resAction); } }; rpcClient.call(request, responseConsumer); return future; }
@Transactional public boolean deleteDevice(@NotNull String deviceId) { DeviceVO deviceVO = deviceDao.findById(deviceId); if (deviceVO == null) { logger.error("Device with ID {} not found", deviceId); return false; } DeviceDeleteRequest deviceDeleteRequest = new DeviceDeleteRequest(deviceVO); Request request = Request.newBuilder() .withBody(deviceDeleteRequest) .build(); CompletableFuture<String> future = new CompletableFuture<>(); Consumer<Response> responseConsumer = response -> { Action resAction = response.getBody().getAction(); if (resAction.equals(Action.DEVICE_DELETE_RESPONSE)) { future.complete(response.getBody().getAction().name()); } else { logger.warn("Unknown action received from backend {}", resAction); } }; rpcClient.call(request, responseConsumer); return deviceDao.deleteById(deviceId) != 0; }
public CompletableFuture<Pair<Long, DeviceCommand>> sendSubscribeToUpdateRequest(final long commandId, final DeviceVO device, BiConsumer<DeviceCommand, Long> callback) { CompletableFuture<Pair<Long, DeviceCommand>> future = new CompletableFuture<>(); final Long subscriptionId = idGenerator.generate(); Consumer<Response> responseConsumer = response -> { Action resAction = response.getBody().getAction(); if (resAction.equals(Action.COMMAND_UPDATE_SUBSCRIBE_RESPONSE)) { future.complete(Pair.of(response.getBody().cast(CommandUpdateSubscribeResponse.class).getSubscriptionId(), response.getBody().cast(CommandUpdateSubscribeResponse.class).getDeviceCommand())); } else if (resAction.equals(COMMAND_UPDATE_EVENT)) { callback.accept(response.getBody().cast(CommandUpdateEvent.class).getDeviceCommand(), subscriptionId); } else { logger.warn("Unknown action received from backend {}", resAction); } }; Filter filter = new Filter(device.getNetworkId(), device.getDeviceTypeId(), Long.toString(commandId), COMMAND_UPDATE_EVENT.name(), null); rpcClient.call(Request.newBuilder() .withBody(new CommandUpdateSubscribeRequest(commandId, device.getDeviceId(), subscriptionId, filter)) .build(), responseConsumer); return future; }