refactor(server): Fi StdioServerTransportProvider initialization flow (#74)

Extract message processing initialization from StdioMcpSessionTransport constructor into a
separate initProcessing() method.

Signed-off-by: Christian Tzolov <christian.tzolov@broadcom.com>
This commit is contained in:
Christian Tzolov 2025-03-26 12:09:46 +01:00 • committed by Christian Tzolov
commit 96e6d9cc15

View file

@ -93,7 +93,9 @@ public class StdioServerTransportProvider implements McpServerTransportProvider
@Override
public void setSessionFactory(McpServerSession.Factory sessionFactory) {
// Create a single session for the stdio connection
this.session = sessionFactory.create(new StdioMcpSessionTransport());
var transport = new StdioMcpSessionTransport();
this.session = sessionFactory.create(transport);
transport.initProcessing();
}
@Override
@ -142,10 +144,6 @@ public class StdioServerTransportProvider implements McpServerTransportProvider
"stdio-inbound");
this.outboundScheduler = Schedulers.fromExecutorService(Executors.newSingleThreadExecutor(),
"stdio-outbound");
handleIncomingMessages();
startInboundProcessing();
startOutboundProcessing();
}
@Override
@ -181,6 +179,12 @@ public class StdioServerTransportProvider implements McpServerTransportProvider
logger.debug("Session transport closed");
}
private void initProcessing() {
handleIncomingMessages();
startInboundProcessing();
startOutboundProcessing();
}
private void handleIncomingMessages() {
this.inboundSink.asFlux().flatMap(message -> session.handle(message)).doOnTerminate(() -> {
// The outbound processing will dispose its scheduler upon completion