Клиент 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);
    }
}
Другие вопросы по тегам