+ public void readMessages(final RequestHandler requestHandler, final Consumer<JsonRpcResponse> responseHandler) {
+ if (input != null) {
+ JsonRpcMessage message = parseJsonRpcMessage(input);
+ if (message == null) {
+ return;
+ }
+
+ handleMessage(message, requestHandler, responseHandler);
+ return;
+ }
+
+ try (final var executor = Executors.newCachedThreadPool()) {
+ while (!Thread.interrupted()) {
+ final var input = lineSupplier.get();
+ if (input == null) {
+ logger.trace("Reached end of JSON-RPC input stream.");
+ break;
+ }
+
+ logger.trace("Incoming JSON-RPC message: {}", input);
+ final var message = parseJsonRpcMessage(input);
+ if (message == null) {
+ continue;
+ }
+
+ executor.submit(() -> handleMessage(message, requestHandler, responseHandler));
+ }
+ }
+ }
+
+ private void handleMessage(
+ final JsonRpcMessage message,
+ final RequestHandler requestHandler,
+ final Consumer<JsonRpcResponse> responseHandler
+ ) {
+ switch (message) {
+ case JsonRpcRequest jsonRpcRequest -> {
+ logger.debug("Received json rpc request, method: " + jsonRpcRequest.getMethod());
+ final var response = handleRequest(requestHandler, jsonRpcRequest);