package io.muoncore.transport.sharedsocket.client; import io.muoncore.channel.ChannelConnection; import io.muoncore.exception.MuonTransportFailureException; import io.muoncore.exception.NoSuchServiceException; import io.muoncore.message.MuonInboundMessage; import io.muoncore.message.MuonOutboundMessage; import java.util.HashMap; import java.util.Map; public class SharedSocketRouter { public static final String PROTOCOL = "shared-channel"; private Map<String, SharedSocketRoute> routesToServices = new HashMap<>(); private SharedSocketRouteFactory sharedSocketRouteFactory; public SharedSocketRouter(SharedSocketRouteFactory sharedSocketRouteFactory) { this.sharedSocketRouteFactory = sharedSocketRouteFactory; } public ChannelConnection<MuonOutboundMessage, MuonInboundMessage> openClientChannel(String serviceName) throws NoSuchServiceException, MuonTransportFailureException { SharedSocketRoute sharedChannelRoute = getRoute(serviceName); return sharedChannelRoute.openClientChannel(); } private synchronized SharedSocketRoute getRoute(String serviceName) { SharedSocketRoute route = routesToServices.get(serviceName); if (route == null) { route = sharedSocketRouteFactory.createRoute(serviceName); routesToServices.put(serviceName, route); } return route; } }