Клиент Netty 3.9 не отправляет кодировщик
У меня проблема с использованием Netty 3.9, когда я сделал клиент, который отправляет / выполняет кодировщик, как только он подключается к серверу. Но он просто подключается без отправки кодера.
ClientHandler
public final class ClientHandler extends IdleStateAwareChannelUpstreamHandler {
@Override
public void channelConnected(ChannelHandlerContext ctx, ChannelStateEvent e) throws Exception {
Channel channel = ctx.getChannel();
logger.info("Channel connected: " + channel);
}
}
ClientPipelineFactory
private final ClientHandler handler = new ClientHandler();
@Override
public ChannelPipeline getPipeline() throws Exception {
ChannelPipeline pipeline = Channels.pipeline();
pipeline.addLast("handler", handler);
pipeline.addLast("encoder", new HandshakeEncoder());
return pipeline;
}
HandshakeEncoder
public final class HandshakeEncoder extends OneToOneEncoder {
@Override
protected Object encode(ChannelHandlerContext ctx, Channel channel, Object msg) throws Exception {
ChannelBuffer buffer = ChannelBuffers.buffer(1);
buffer.writeByte(49);
return buffer;
}
}
1 ответ
Решение
Кодировщик будет вызываться только тогда, когда вы что-то записываете на канал. Я думаю, что вы хотите, чтобы расширить SimpleChannelUpstreamHandler и использовать что-то вроде:
public final class HandshakeHandler extends SimpleChannelUpstreamHandler {
@Override
public void channelConnected(ChannelHandlerContext ctx, ChannelStateEvent e) throws Exception {
Channel channel = ctx.getChannel();
ChannelBuffer buffer = ChannelBuffers.buffer(1);
buffer.writeByte(49);
channel.write(buffer);
}
}