Я хочу отправить собственное сообщение, прежде чем отправлять фактическое, при первом инициализации канала.У меня есть:
public class MyClientInitializerFactory extends ClientInitializerFactory {
@Override
protected void initChannel(Channel ch) {
ChannelPipeline pipeline = ch.pipeline();
pipeline.addLast(new EncoderTwo());
pipeline.addLast(new EncoderOne());
}
}
EncoderOne:
public class EncoderOne extends MessageToMessageEncoder<Object> {
@Override
protected void encode(ChannelHandlerContext ctx, Object msg, List<Object> out) throws Exception {
byte[] bytes = "ABCD".getBytes(StandardCharsets.UTF_8);
ByteBuf byteBuf = Unpooled.buffer(bytes.length);
Channel channel = ctx.channel();
channel.writeAndFlush(byteBuf);
out.add(msg); // retaining original message for further processing
ctx.pipeline().remove(this);
}
EncoderTwo обрабатывает фактическое сообщение и отправляет его по проводам, но мое сообщение там не доходит.Когда я пытаюсь что-либо отправить, эти строки выполняются снова и снова, пока я не получу StackOverflow:
ByteBuf byteBuf = Unpooled.buffer(bytes.length);
Channel channel = ctx.channel();
channel.writeAndFlush(byteBuf);
Что я делаю не так?