Я создал одинаковые классы декодеров и кодировщиков на клиенте и сервере;
Декодер:
Код: Выделить всё
public class UserInfoDecoder extends ByteToMessageDecoder {
@Override
protected void decode(ChannelHandlerContext channelHandlerContext, ByteBuf byteBuf, List list) throws Exception {
...
list.add(new UserInfo(...))
}
}
Код: Выделить всё
public class UserInfoEncoder extends MessageToByteEncoder {
@Override
protected void encode(ChannelHandlerContext ctx, UserInfo msg, ByteBuf out) {
...
out.writeBytes(...);
}
}
Код: Выделить всё
public void initChannel(SocketChannel ch) throws Exception {
ChannelPipeline p = ch.pipeline();
if (sslCtx != null) {
p.addLast(sslCtx.newHandler(ch.alloc()));
}
p.addLast(
// new ObjectEncoder(),
// new ObjectDecoder(ClassResolvers.cacheDisabled(null)),
new UserInfoDecoder(),
new UserInfoEncoder(),
new ObjectEchoServerHandler());
}
Код: Выделить всё
@Override
public void channelRead(ChannelHandlerContext ctx, Object msg) {
...
}
Например. теперь у меня есть только класс UserInfo, и я могу привести Object msg в ChannelRead к UserInfo, но я хочу также отправить объект UsersCar, например, как различать объекты по типам, которые были отправлены?
Подробнее здесь: https://stackoverflow.com/questions/395 ... netty-java
Мобильная версия