package edu.uw.zookeeper.netty.client;
import java.util.concurrent.ThreadFactory;
import io.netty.bootstrap.Bootstrap;
import io.netty.channel.EventLoopGroup;
import io.netty.channel.socket.nio.NioSocketChannel;
import edu.uw.zookeeper.common.Factory;
import edu.uw.zookeeper.common.ParameterizedFactory;
import edu.uw.zookeeper.common.Reference;
import edu.uw.zookeeper.common.ServiceMonitor;
import edu.uw.zookeeper.netty.DaemonThreadFactory;
import edu.uw.zookeeper.netty.EventLoopGroupService;
import edu.uw.zookeeper.netty.NioEventLoopGroupFactory;
import edu.uw.zookeeper.netty.SimpleBootstrapFactory;
public class NioClientBootstrapFactory implements Factory<Bootstrap> {
public static NioClientBootstrapFactory newInstance(
Factory<ThreadFactory> threadFactory,
ServiceMonitor serviceMonitor) {
ThreadFactory threads = DaemonThreadFactory.getInstance().get(threadFactory.get());
Reference<? extends EventLoopGroup> groupFactory = EventLoopGroupService.factory(
NioEventLoopGroupFactory.DEFAULT,
serviceMonitor).get(threads);
return newInstance(groupFactory);
}
public static NioClientBootstrapFactory newInstance(
Factory<? extends EventLoopGroup> groupFactory) {
return new NioClientBootstrapFactory(groupFactory);
}
protected final Factory<? extends EventLoopGroup> groupFactory;
protected final ParameterizedFactory<Factory<? extends EventLoopGroup>, Bootstrap> bootstrapFactory;
protected NioClientBootstrapFactory(Factory<? extends EventLoopGroup> groupFactory) {
this.groupFactory = groupFactory;
this.bootstrapFactory = SimpleBootstrapFactory.newInstance(
NioSocketChannel.class,
ClientTcpChannelOptionsFactory.getInstance());
}
@Override
public Bootstrap get() {
return bootstrapFactory.get(groupFactory);
}
}