package edu.uw.zookeeper.net.intravm; import io.netty.buffer.ByteBufAllocator; import io.netty.buffer.UnpooledByteBufAllocator; import java.net.SocketAddress; import java.util.concurrent.Executor; import com.google.common.base.Supplier; import edu.uw.zookeeper.common.Factory; import edu.uw.zookeeper.net.Codec; public class IntraVmCodecEndpointFactory<I,O,T extends Codec<I,? extends O,? extends I,?>> extends AbstractIntraVmEndpointFactory<IntraVmCodecEndpoint<I,O,T>> { public static <I,O,T extends Codec<I,? extends O,? extends I,?>> IntraVmCodecEndpointFactory<I,O,T> defaults( Supplier<? extends T> codecs, Supplier<? extends SocketAddress> addresses) { return create(codecs, unpooled(), addresses, sameThreadExecutors()); } public static <I,O,T extends Codec<I,? extends O,? extends I,?>> IntraVmCodecEndpointFactory<I,O,T> create( Supplier<? extends T> codecs, Supplier<? extends ByteBufAllocator> allocators, Supplier<? extends SocketAddress> addresses, Supplier<? extends Executor> executors) { return new IntraVmCodecEndpointFactory<I,O,T>( codecs, allocators, addresses, executors); } public static Factory<ByteBufAllocator> unpooled() { return new Factory<ByteBufAllocator>() { @Override public ByteBufAllocator get() { return new UnpooledByteBufAllocator(false); } }; } protected final Supplier<? extends ByteBufAllocator> allocators; protected final Supplier<? extends T> codecs; public IntraVmCodecEndpointFactory( Supplier<? extends T> codecs, Supplier<? extends ByteBufAllocator> allocators, Supplier<? extends SocketAddress> addresses, Supplier<? extends Executor> executors) { super(addresses, executors); this.allocators = allocators; this.codecs = codecs; } @Override public IntraVmCodecEndpoint<I,O,T> get() { return IntraVmCodecEndpoint.<I,O,T>newInstance(allocators.get(), codecs.get(), addresses.get(), executors.get()); } }