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; }
deviceId, networks, deviceTypes, timestamp, names, session); Set<Filter> filters = filterService.getFilterList(deviceId, networks, deviceTypes, COMMAND_EVENT.name(), names, authentication);
@Override public Collection<Filter> getApplicableFilters() { Filter deviceFilter = new Filter(command.getNetworkId(), command.getDeviceTypeId(), command.getId().toString(), Action.COMMAND_UPDATE_EVENT.name(), null); Filter deviceWithNameFilter = new Filter(command.getNetworkId(), command.getDeviceTypeId(), command.getId().toString(), Action.COMMAND_UPDATE_EVENT.name(), command.getCommand()); return Arrays.asList(deviceFilter, deviceWithNameFilter); }
deviceId, networks, deviceTypes, timestamp, names, session); Set<Filter> filters = filterService.getFilterList(deviceId, networks, deviceTypes, NOTIFICATION_EVENT.name(), names, authentication);
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; } }
@Override public Collection<Filter> getApplicableFilters() { Filter deviceFilter = new Filter(command.getNetworkId(), command.getDeviceTypeId(), command.getDeviceId(), Action.COMMAND_EVENT.name(), null); Filter deviceWithNameFilter = new Filter(command.getNetworkId(), command.getDeviceTypeId(), command.getDeviceId(), Action.COMMAND_EVENT.name(), command.getCommand()); return Arrays.asList(deviceFilter, deviceWithNameFilter); }
Set<Filter> filters = filterService.getFilterList(deviceId, networks, deviceTypes, NOTIFICATION_EVENT.name(), names, authentication);
@Override public Collection<Filter> getApplicableFilters() { Filter deviceFilter = new Filter(command.getNetworkId(), command.getDeviceTypeId(), command.getDeviceId(), Action.COMMANDS_UPDATE_EVENT.name(), null); Filter deviceWithNameFilter = new Filter(command.getNetworkId(), command.getDeviceTypeId(), command.getDeviceId(), Action.COMMANDS_UPDATE_EVENT.name(), command.getCommand()); return Arrays.asList(deviceFilter, deviceWithNameFilter); }
@Override public Collection<Filter> getApplicableFilters() { Filter deviceFilter = new Filter(notification.getNetworkId(), notification.getDeviceTypeId(), notification.getDeviceId(), Action.NOTIFICATION_EVENT.name(), null); Filter deviceWithNameFilter = new Filter(notification.getNetworkId(), notification.getDeviceTypeId(), notification.getDeviceId(), Action.NOTIFICATION_EVENT.name(), notification.getNotification()); return Arrays.asList(deviceFilter, deviceWithNameFilter); }
@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; }
private List<Response> createCommandSubscription(PluginSubscribeRequest body, boolean returnUpdated) { return body.getFilters().stream() .map(filter -> { filter.setEventName(COMMAND_EVENT.name()); CommandSubscribeRequest commandSubscribeRequest = new CommandSubscribeRequest(body.getSubscriptionId(), filter, body.getNames(), null, returnUpdated, 0); Request commandRequest = Request.newBuilder() .withBody(commandSubscribeRequest) .withSingleReply(false) .build(); commandRequest.setReplyTo(body.getTopicName()); return commandSubscribeRequestHandler.handle(commandRequest); }).collect(toList()); }
private List<Response> createNotificationSubscription(PluginSubscribeRequest body) { return body.getFilters().stream() .map(filter -> { filter.setEventName(NOTIFICATION_EVENT.name()); NotificationSubscribeRequest notificationSubscribeRequest = new NotificationSubscribeRequest( body.getSubscriptionId(), filter, body.getNames(), null); Request notificationRequest = Request.newBuilder() .withBody(notificationSubscribeRequest) .withSingleReply(false) .build(); notificationRequest.setReplyTo(body.getTopicName()); return notificationSubscribeRequestHandler.handle(notificationRequest); }).collect(toList()); }
Set<Filter> filters = filterService.getFilterList(deviceId, networks, deviceTypes, COMMAND_EVENT.name(), names, authentication);
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; }
@Override public Response handle(Request request) { CommandSubscribeRequest body = (CommandSubscribeRequest) request.getBody(); validate(body); Subscriber subscriber = new Subscriber(body.getSubscriptionId(), request.getReplyTo(), request.getCorrelationId()); Filter filter = body.getFilter(); if (body.isReturnUpdated()) { filter.setEventName(COMMANDS_UPDATE_EVENT.name()); } eventBus.subscribe(filter, subscriber); Collection<DeviceCommand> commands = findCommands(filter, body.getNames(), body.getTimestamp(), body.isReturnUpdated(), body.getLimit()); CommandSubscribeResponse subscribeResponse = new CommandSubscribeResponse(body.getSubscriptionId(), commands); return Response.newBuilder() .withBody(subscribeResponse) .withLast(false) .withCorrelationId(request.getCorrelationId()) .buildSuccess(); }