package io.craft.atom.rpc;
import io.craft.atom.io.IoAcceptor;
import io.craft.atom.io.IoHandler;
import io.craft.atom.nio.NioOrderedDirectChannelEventDispatcher;
import io.craft.atom.nio.api.NioFactory;
import io.craft.atom.rpc.spi.RpcAcceptor;
import io.craft.atom.rpc.spi.RpcProcessor;
import io.craft.atom.rpc.spi.RpcProtocol;
import java.io.IOException;
import java.net.SocketAddress;
import lombok.Getter;
import lombok.Setter;
/**
* @author mindwind
* @version 1.0, Aug 6, 2014
*/
public class DefaultRpcAcceptor implements RpcAcceptor {
@Getter @Setter private int ioTimeoutInMillis;
@Getter @Setter private int connections ;
@Getter @Setter private SocketAddress address ;
@Getter @Setter private RpcProcessor processor ;
@Getter @Setter private RpcProtocol protocol ;
@Getter @Setter private IoHandler ioHandler ;
@Getter @Setter private IoAcceptor ioAcceptor ;
// ~ ------------------------------------------------------------------------------------------------------------
public DefaultRpcAcceptor() {}
// ~ ------------------------------------------------------------------------------------------------------------
@Override
public void bind() throws IOException {
ioHandler = new RpcServerIoHandler(protocol, processor);
ioAcceptor = NioFactory.newTcpAcceptorBuilder(ioHandler)
.channelSize(connections)
.ioTimeoutInMillis(ioTimeoutInMillis)
.dispatcher(new NioOrderedDirectChannelEventDispatcher())
.build();
ioAcceptor.bind(address);
}
@Override
public int connectionCount() {
return ioAcceptor.x().aliveChannelCount();
}
@Override
public void close() {
ioAcceptor.shutdown();
}
}