Я новичок в netty, и я пытаюсь написать простое приложение клиент / сервер чата. Если я использую кодировщик / декодер String по умолчанию, то все работает нормально, но когда я пытаюсь написать свой собственный кодер / декодер, кажется, что он не отправляет его на сервер после кодирования. Для простоты я пытаюсь отправить только постоянное целое число.
Вот кодер:
import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandlerContext;
import io.netty.handler.codec.MessageToByteEncoder;
public class ChatEncoder extends MessageToByteEncoder {
@Override
protected void encode(ChannelHandlerContext chc, Object msg, ByteBuf out) throws Exception {
System.out.println("ENCODE BEFORE");
out.writeInt(2);
System.out.println("ENCODE AFTER");
}
}
Вот декодер:
import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandlerContext;
import io.netty.handler.codec.ByteToMessageDecoder;
import java.util.List;
public class ChatDecoder extends ByteToMessageDecoder {
@Override
protected void decode(ChannelHandlerContext chc, ByteBuf in, List<Object> out) throws Exception {
System.out.println("DECODE BEFORE");
out.add(in.readBytes(4));
System.out.println("DECODE AFTER");
}
}
Если я использую их для конвейерного декодера / кодировщика, это не работает. Если я использую его с кодировщиком / декодером строк, он отлично работает:
pipeline.addLast("decoder", new ChatDecoder()); //StringEncoder()
pipeline.addLast("encoder", new ChatEncoder()); //StringDecoder()
Я получаю сообщения «ENCODE BEFORE» и «ENCODE AFTER», но не «DECODE BEFORE».
Что я делаю не так?