Я кодирую простой пакетный сервис Netty. В настоящее время у меня есть сервер и клиент с модулем центрального протокола.
Журнал моего клиента выглядит так:
PacketId в кодировке: 1
Записанный пакет.
Запись int: 441
Журнал моего сервера:
PacketId: 8
протокол пуст? с id: 8
PacketId: 1
получение теста с идентификатором: 0
кодировщик:
@Override
protected void encode( ChannelHandlerContext channelHandlerContext, Packet packet, ByteBuf byteBuf ) {
final Protocol protocol = Protocol.getProtocol( packet.getClass() );
if ( protocol == null ) {
throw new IllegalStateException( "The requested packet is not registered!" );
} else {
final int packetId = protocol.getId();
if ( packetId > -1 ) {
byteBuf.writeInt( packetId );
System.out.println( "PacketId encoded: " + packetId );
packet.write( byteBuf );
System.out.println( "Writed packet." );
}
}
}
Декодер:
@Override
protected void decode( ChannelHandlerContext channelHandlerContext, ByteBuf byteBuf, List<Object> list ) throws Exception {
final int packetId = byteBuf.readInt();
System.out.println( "PacketId: " + packetId );
final Protocol protocol = Protocol.getProtocol( packetId );
if ( protocol == null ) {
System.out.println( "protocol is null ? with id: " + packetId );
} else {
final Class<? extends Packet> packetClass = Objects.requireNonNull( protocol ).getPacketClass();
if ( packetClass != null ) {
Packet packet = packetClass.newInstance();
packet.read( byteBuf );
list.add( packet );
}
}
}
Кто-нибудь знает, как решить?
Спасибо за любой вклад!