кодер / декодер сообщений Java Netty нет ответа - PullRequest
0 голосов
/ 06 мая 2018

Я новичок в 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».

Что я делаю не так?

...