package com.netifera.platform.internal.channel.tcplisten;
import java.net.InetSocketAddress;
import com.netifera.platform.api.channels.IChannelConnecter;
import com.netifera.platform.api.channels.IChannelFactory;
import com.netifera.platform.api.channels.IChannelServer;
import com.netifera.platform.api.dispatcher.IClientDispatcher;
import com.netifera.platform.api.dispatcher.IServerDispatcher;
import com.netifera.platform.api.log.ILogManager;
import com.netifera.platform.api.log.ILogger;
import com.netifera.platform.channel.socket.ConfigParser;
import com.netifera.platform.channel.tcplisten.ITCPListenServer;
public class TCPListenChannelFactory implements IChannelFactory {
private final ConfigParser configParser = new ConfigParser(ITCPListenServer.CHANNEL_TYPE);
private ILogger logger;
public IChannelConnecter createConnecter(IClientDispatcher clientDispatcher, String channelConfig) {
final InetSocketAddress address = configParser.configToAddress(channelConfig);
/* XXX should throw a checked exception instead of returning null? */
if(address == null)
return null;
final TCPListenConnecter connecter = new TCPListenConnecter(clientDispatcher);
connecter.setAddress(address);
return connecter;
}
public IChannelServer createServer(IServerDispatcher serverDispatcher, String config) {
final int listenPort = configParser.stringToPort(config);
if(listenPort != ConfigParser.INVALID_PORT) {
return createConfiguredServer(new InetSocketAddress(listenPort), serverDispatcher);
}
final InetSocketAddress listenAddress = configParser.configToAddress(config);
if(listenAddress == null)
return null;
return createConfiguredServer(listenAddress, serverDispatcher);
}
private IChannelServer createConfiguredServer(InetSocketAddress listenAddress, IServerDispatcher serverDispatcher) {
final TCPListenChannelServer server = new TCPListenChannelServer(serverDispatcher, logger);
server.setListenAddress(listenAddress);
return server;
}
public String getType() {
return ITCPListenServer.CHANNEL_TYPE;
}
protected void setLogManager(ILogManager logManager) {
logger = logManager.getLogger("TCP Listen Channel");
}
protected void unsetLogManager(ILogManager logManager) {
logger = null;
}
}