- JsonRpcMessage message = readMessage();
- if (message == null) break;
-
- if (message instanceof final JsonRpcRequest jsonRpcRequest) {
- logger.debug("Received json rpc request, method: " + jsonRpcRequest.method);
- final var response = handleRequest(requestHandler, jsonRpcRequest);
- if (response != null) {
- jsonRpcSender.sendResponse(response);
- }
- } else if (message instanceof JsonRpcResponse jsonRpcResponse) {
- responseHandler.accept(jsonRpcResponse);
- } else {
- final var responseList = ((JsonRpcBatchMessage) message).getMessages().stream().map(jsonNode -> {
- final JsonRpcRequest request;
- try {
- request = parseJsonRpcRequest(jsonNode);
- } catch (JsonRpcException e) {
- return JsonRpcResponse.forError(e.getError(), getId(jsonNode));
- }
-
- return handleRequest(requestHandler, request);
- }).filter(Objects::nonNull).collect(Collectors.toList());
-
- jsonRpcSender.sendBatchResponses(responseList);
+ String input = lineSupplier.get();
+ if (input == null) {
+ logger.trace("Reached end of JSON-RPC input stream.");
+ break;
+ }
+
+ logger.trace("Incoming JSON-RPC message: {}", input);
+ JsonRpcMessage message = parseJsonRpcMessage(input);
+ if (message == null) {
+ continue;
+ }
+
+ handleMessage(message, requestHandler, responseHandler);
+ }
+ }
+
+ private void handleMessage(
+ final JsonRpcMessage message,
+ final RequestHandler requestHandler,
+ final Consumer<JsonRpcResponse> responseHandler
+ ) {
+ if (message instanceof final JsonRpcRequest jsonRpcRequest) {
+ logger.debug("Received json rpc request, method: " + jsonRpcRequest.getMethod());
+ final var response = handleRequest(requestHandler, jsonRpcRequest);
+ if (response != null) {
+ jsonRpcSender.sendResponse(response);