package com.netifera.platform.internal.dispatcher; import java.io.IOException; import java.util.Set; import com.netifera.platform.api.channels.IChannelTransport; import com.netifera.platform.api.dispatcher.IClientDispatcher; import com.netifera.platform.api.dispatcher.IMessageHandler; import com.netifera.platform.api.dispatcher.IMessenger; import com.netifera.platform.api.dispatcher.IProbeMessage; import com.netifera.platform.api.dispatcher.MessengerException; import com.netifera.platform.api.log.ILogManager; import com.netifera.platform.api.log.ILogger; import com.netifera.platform.internal.dispatcher.channels.LocalChannel; public class ClientDispatcher implements IClientDispatcher { private final MessageDispatcher dispatcher; private final ServerDispatcher serverDispatcher; private final ILogger logger; private LocalChannel localChannel; ClientDispatcher(ServerDispatcher serverDispatcher, ILogManager logManager) { logger = logManager.getLogger("Dispatcher [client]"); dispatcher = new MessageDispatcher(logger); this.serverDispatcher = serverDispatcher; } public IMessenger createMessenger(IChannelTransport transport) throws IOException { return dispatcher.createMessenger(transport); } public IMessenger getLocalMessenger() { if(localChannel == null) { localChannel = LocalChannel.create(this, serverDispatcher, logger); } return localChannel.getClientMessenger(); } public void dispatch(IMessenger source, IProbeMessage message) throws MessengerException { dispatcher.dispatch(source, message); } public Set<String> messagesHandled() { return dispatcher.messagesHandled(); } public void registerMessageHandler(String messageName, IMessageHandler handler) { dispatcher.registerMessageHandler(messageName, handler); } }