package com.netifera.platform.internal.dispatcher;
import java.io.IOException;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
import com.netifera.platform.api.channels.IChannelMessageSerializer;
import com.netifera.platform.api.channels.IChannelTransport;
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.IServerDispatcher;
import com.netifera.platform.api.dispatcher.MessengerException;
import com.netifera.platform.api.log.ILogManager;
import com.netifera.platform.api.log.ILogger;
public class ServerDispatcher implements IServerDispatcher {
private final MessageDispatcher dispatcher;
private final ILogger logger;
private final Set<IMessenger> messengers;
ServerDispatcher(ILogManager logManager) {
logger = logManager.getLogger("Dispatcher [server]");
dispatcher = new MessageDispatcher(logger);
messengers = new HashSet<IMessenger>();
}
public void registerNewConnection(IChannelTransport transport) {
try {
messengers.add(dispatcher.createMessenger(transport));
} catch (IOException e) {
logger.error("IO Error registering new connection", e);
}
}
public void registerLocalConnection(IChannelMessageSerializer localSerializer) {
final Messenger messenger = new Messenger(localSerializer, this, logger);
messenger.start();
messengers.add(messenger);
}
public Iterable<IMessenger> getActiveMessengers() {
return Collections.unmodifiableSet(messengers);
}
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);
}
}