Signed-off-by: Dariusz Jędrzejczyk <dariusz.jedrzejczyk@broadcom.com>
This commit is contained in:
Dariusz Jędrzejczyk 2025-04-23 11:06:26 +02:00
commit 866732c383
No known key found for this signature in database
GPG key ID: FD786A4E2335C448

View file

@ -122,12 +122,10 @@ public class McpClientSession implements McpSession {
// Observation associated with the individual message - it can be used to // Observation associated with the individual message - it can be used to
// create child Observation and emit it together with the message to the // create child Observation and emit it together with the message to the
// consumer // consumer
this.connection = this.transport.connect(mono -> mono.doOnNext(message -> handle(message).subscribe())) this.connection = this.transport.connect(mono -> mono.doOnNext(this::handle)).subscribe();
.subscribe();
} }
public Mono<Void> handle(McpSchema.JSONRPCMessage message) { private void handle(McpSchema.JSONRPCMessage message) {
return Mono.defer(() -> {
if (message instanceof McpSchema.JSONRPCResponse response) { if (message instanceof McpSchema.JSONRPCResponse response) {
logger.debug("Received Response: {}", response); logger.debug("Received Response: {}", response);
var sink = pendingResponses.remove(response.id()); var sink = pendingResponses.remove(response.id());
@ -137,27 +135,25 @@ public class McpClientSession implements McpSession {
else { else {
sink.success(response); sink.success(response);
} }
return Mono.empty();
} }
else if (message instanceof McpSchema.JSONRPCRequest request) { else if (message instanceof McpSchema.JSONRPCRequest request) {
logger.debug("Received request: {}", request); logger.debug("Received request: {}", request);
return handleIncomingRequest(request).onErrorResume(error -> { handleIncomingRequest(request).onErrorResume(error -> {
var errorResponse = new McpSchema.JSONRPCResponse(McpSchema.JSONRPC_VERSION, request.id(), null, var errorResponse = new McpSchema.JSONRPCResponse(McpSchema.JSONRPC_VERSION, request.id(), null,
new McpSchema.JSONRPCResponse.JSONRPCError(McpSchema.ErrorCodes.INTERNAL_ERROR, new McpSchema.JSONRPCResponse.JSONRPCError(McpSchema.ErrorCodes.INTERNAL_ERROR,
error.getMessage(), null)); error.getMessage(), null));
return this.transport.sendMessage(errorResponse).then(Mono.empty()); return this.transport.sendMessage(errorResponse).then(Mono.empty());
}).flatMap(this.transport::sendMessage); }).flatMap(this.transport::sendMessage).subscribe();
} }
else if (message instanceof McpSchema.JSONRPCNotification notification) { else if (message instanceof McpSchema.JSONRPCNotification notification) {
logger.debug("Received notification: {}", notification); logger.debug("Received notification: {}", notification);
return handleIncomingNotification(notification) handleIncomingNotification(notification)
.doOnError(error -> logger.error("Error handling notification: {}", error.getMessage())); .doOnError(error -> logger.error("Error handling notification: {}", error.getMessage()))
.subscribe();
} }
else { else {
logger.warn("Received unknown message type: {}", message); logger.warn("Received unknown message type: {}", message);
return Mono.empty();
} }
});
} }
/** /**