@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); }
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 @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()); } } }
@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 Response handle(Request request) { NotificationUnsubscribeRequest body = (NotificationUnsubscribeRequest) request.getBody(); validate(body); if (body.getSubscriptionIds() != null) { for (Long subId : body.getSubscriptionIds()) { Subscriber subscriber = new Subscriber(subId, request.getReplyTo(), request.getCorrelationId()); eventBus.unsubscribe(subscriber); } NotificationUnsubscribeResponse unsubscribeResponse = new NotificationUnsubscribeResponse(body.getSubscriptionIds()); return Response.newBuilder() .withBody(unsubscribeResponse) .withCorrelationId(request.getCorrelationId()) .buildSuccess(); } else { throw new IllegalArgumentException("Subscription ids are null"); } }
@Override public Response handle(Request request) { CommandUnsubscribeRequest body = (CommandUnsubscribeRequest) request.getBody(); validate(body); if (body.getSubscriptionIds() != null) { for (Long subId : body.getSubscriptionIds()) { Subscriber subscriber = new Subscriber(subId, request.getReplyTo(), request.getCorrelationId()); eventBus.unsubscribe(subscriber); } CommandUnsubscribeResponse unsubscribeResponse = new CommandUnsubscribeResponse(body.getSubscriptionIds()); return Response.newBuilder() .withBody(unsubscribeResponse) .withCorrelationId(request.getCorrelationId()) .buildSuccess(); } else { throw new IllegalArgumentException("Subscription ids are null"); } }
@Override public Response handle(Request request) { PluginSubscribeRequest body = (PluginSubscribeRequest) request.getBody(); validate(body); if (body.isReturnCommands()) { createCommandSubscription(body, false); } if (body.isReturnUpdatedCommands()) { createCommandSubscription(body, true); } if (body.isReturnNotifications()) { createNotificationSubscription(body); } return Response.newBuilder() .withBody(new PluginSubscribeResponse(body.getSubscriptionId())) .withLast(false) .withCorrelationId(request.getCorrelationId()) .buildSuccess(); }
@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(); }
@Override public Response handle(Request request) { NotificationSubscribeRequest body = (NotificationSubscribeRequest) request.getBody(); validate(body); Subscriber subscriber = new Subscriber(body.getSubscriptionId(), request.getReplyTo(), request.getCorrelationId()); Filter filter = body.getFilter(); eventBus.subscribe(filter, subscriber); Collection<DeviceNotification> notifications = findNotifications(filter, body.getNames(), body.getTimestamp()); NotificationSubscribeResponse subscribeResponse = new NotificationSubscribeResponse(body.getSubscriptionId(), notifications); return Response.newBuilder() .withBody(subscribeResponse) .withLast(false) .withCorrelationId(request.getCorrelationId()) .buildSuccess(); }
public static <T extends Body> Builder<T> newBuilder() { return new Builder<> (); }
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; }
public void publish(Event event) { event.getApplicableFilters() .stream() .flatMap(filter -> registry.getSubscribers(filter).stream()) .forEach(subscriber -> { Response response = Response.newBuilder() .withBody(event) .withCorrelationId(subscriber.getCorrelationId()) .withLast(false) .buildSuccess(); dispatcher.send(subscriber.getReplyTo(), response); }); }
@Override public Response handle(Request request) { final CommandUpdateSubscribeRequest body = request.getBody().cast(CommandUpdateSubscribeRequest.class); final Subscriber subscriber = new Subscriber(body.getSubscriptionId(), request.getReplyTo(), request.getCorrelationId()); eventBus.subscribe(body.getFilter(), subscriber); final DeviceCommand deviceCommand = hazelcastService .find(body.getCommandId(), body.getDeviceId(), DeviceCommand.class) .orElse(null); return Response.newBuilder() .withBody(new CommandUpdateSubscribeResponse(body.getSubscriptionId(), deviceCommand)) .withLast(false) .withCorrelationId(request.getCorrelationId()) .buildSuccess(); } }
@Override public Response handle(Request request) { final DeviceCommand command = request.getBody().cast(CommandUpdateRequest.class).getDeviceCommand(); hazelcastService.store(command); eventBus.publish(new CommandUpdateEvent(command)); return Response.newBuilder().buildSuccess(); } }
@Override public Response handle(Request request) { final CountDeviceRequest req = (CountDeviceRequest) request.getBody(); final long count = deviceDao.count(req.getName(), req.getNamePattern(), req.getNetworkId(), req.getNetworkName(), req.getPrincipal()); final CountResponse countResponse = new CountResponse(count); return Response.newBuilder() .withBody(countResponse) .buildSuccess(); } }
@Override public Response handle(Request request) { NotificationSearchRequest searchRequest = (NotificationSearchRequest) request.getBody(); NotificationSearchResponse payload = searchRequest.getId() != null && !StringUtils.isEmpty(searchRequest.getDeviceId()) ? searchSingleNotificationByDeviceAndId(searchRequest.getId(), searchRequest.getDeviceId()) : searchMultipleNotifications(searchRequest); return Response.newBuilder() .withBody(payload) .buildSuccess(); }
@Override public Response handle(Request request) { CommandSearchRequest searchRequest = (CommandSearchRequest) request.getBody(); CommandSearchResponse payload = searchRequest.getId() != null && !StringUtils.isEmpty(searchRequest.getDeviceId()) ? searchSingleCommandByDeviceAndId(searchRequest.getId(), searchRequest.getDeviceId(), searchRequest.isReturnUpdated()) : searchMultipleCommands(searchRequest); return Response.newBuilder() .withBody(payload) .buildSuccess(); }
@Override public Response handle(Request request) { final CountNetworkRequest req = (CountNetworkRequest) request.getBody(); final long count = networkDao.count(req.getName(), req.getNamePattern(), req.getPrincipal()); final CountResponse countResponse = new CountResponse(count); return Response.newBuilder() .withBody(countResponse) .buildSuccess(); } }
@Override public Response handle(Request request) { final ListDeviceRequest req = (ListDeviceRequest) request.getBody(); final List<DeviceVO> devices = deviceDao.list(req.getName(), req.getNamePattern(), req.getNetworkId(), req.getNetworkName(), req.getSortField(), req.isSortOrderAsc(), req.getTake(), req.getSkip(), req.getPrincipal()); return Response.newBuilder() .withBody(new ListDeviceResponse(devices)) .buildSuccess(); } }
@Override public Response handle(Request request) { DeviceCommand deviceCommand = request.getBody().cast(CommandInsertRequest.class).getDeviceCommand(); CommandEvent commandEvent = new CommandEvent(deviceCommand); eventBus.publish(commandEvent); hazelcastService.store(deviceCommand); CommandInsertResponse payload = new CommandInsertResponse(deviceCommand); return Response.newBuilder() .withBody(payload) .buildSuccess(); } }