Ответ актуален для netty 4.1.25.Final.
Сначала расширьте тип вашего канала
public class ExtendedNioChannel extends NioSocketChannel implements Channel {
private volatile boolean handshakeComplete;
// more custom fields and methods
}
Если вы хотите использовать его для начальной загрузки клиента, просто передайте ему этот класс.
Bootstrap b = new Bootstrap();
b.group(workerGroup);
b.channel(ExtendedNioChannel.class);
Для начальной загрузки сервера необходимо переопределить NioServerSocketChannel и передать NioServerSocketChannel.class в ServerBootstrap.
public class ExtendedNioServerChannel extends NioServerSocketChannel {
private static final InternalLogger logger = InternalLoggerFactory.getInstance(NioServerSocketChannel.class);
@Override
protected int doReadMessages(List<Object> buf) throws Exception {
SocketChannel ch = SocketUtils.accept(javaChannel());
try {
if (ch != null) {
buf.add(new ExtendedNioChannel(this, ch));
return 1;
}
} catch (Throwable t) {
logger.warn("Failed to create a new channel from an accepted socket.", t);
try {
ch.close();
} catch (Throwable t2) {
logger.warn("Failed to close a socket.", t2);
}
}
return 0;
}
}
ServerBootstrap b = new ServerBootstrap();
b.group(acceptGroup, workerGroup)
.channel(BtcNioServerChannel.class)