package edu.uw.zookeeper.netty.client; import io.netty.bootstrap.Bootstrap; import io.netty.channel.Channel; import edu.uw.zookeeper.common.Factory; import edu.uw.zookeeper.common.ParameterizedFactory; import edu.uw.zookeeper.common.RuntimeModule; import edu.uw.zookeeper.net.ClientConnectionFactory; import edu.uw.zookeeper.net.Codec; import edu.uw.zookeeper.net.CodecConnection; import edu.uw.zookeeper.net.Connection; import edu.uw.zookeeper.net.NetClientModule; import edu.uw.zookeeper.netty.ChannelClientConnectionFactory; import edu.uw.zookeeper.netty.ChannelCodecConnection; public class NettyClientModule implements NetClientModule { public static NettyClientModule newInstance( RuntimeModule runtime) { Factory<Bootstrap> bootstrapFactory = NioClientBootstrapFactory.newInstance(runtime.getThreadFactory(), runtime.getServiceMonitor()); return newInstance(bootstrapFactory); } public static NettyClientModule newInstance( Factory<Bootstrap> bootstrapFactory) { return new NettyClientModule(bootstrapFactory); } protected final Factory<Bootstrap> bootstrapFactory; public NettyClientModule( Factory<Bootstrap> bootstrapFactory) { this.bootstrapFactory = bootstrapFactory; } @Override public <I, O, T extends Codec<I,O,? extends I,? extends O>, C extends Connection<?,?,?>> Factory<? extends ClientConnectionFactory<C>> getClientConnectionFactory( Factory<? extends T> codecFactory, ParameterizedFactory<CodecConnection<I,O,T,?>, C> connectionFactory) { ParameterizedFactory<Channel, C> factory = ChannelCodecConnection.factory(codecFactory, connectionFactory); return ChannelClientConnectionFactory.factory(factory, bootstrapFactory); } }