LITTLE_ENDIANに 2 バイトのメッセージ サイズが付加されたメッセージを送受信する必要があるnetty 4.0ベースのアプリケーションがあります。
受信部分を把握し、メッセージを正常に受信しています。
しかし、現在BIG_ENDIANであるデフォルトの長さを追加するPrependerに対して同じことを行う方法がわかりません。これを変更するにはどうすればよいかアドバイスをお願いします。
@Override
public void initChannel(SocketChannel ch) throws Exception {
ch.pipeline()
// Decoder - This part works as expected
.addLast("frameDecoder", new LengthFieldBasedFrameDecoder(ByteOrder.LITTLE_ENDIAN, 4096 /*maximum length*/, 0 /* size field offset */, 2 /* size field length */, 0, 2, false))
.addLast("protobufDecoder", new ProtobufDecoder(MoopRrAdmin.AdminResponse.getDefaultInstance(), extensionRegistry))
// Encoder the Prepender adds length in BIG ENDIAN which is wrong
.addLast("frameEncoder", new LengthFieldPrepender(2 /* size filed length */, 0 /* length adjustment */, true /* size includes size field */))
.addLast("protobufEncoder", new ProtobufEncoder())
// Handler
.addLast(new MoopConnectionHandler(requester, instanceConnectionManager));
}
編集:
実際に機能する一時的な解決策を共有するだけです。これが意図した方法であるとは思わないので、質問はまだ続きます...
...
// Encoder
.addLast("frameEncoder", new LengthFieldPrepender(2 /* size filed length */, 0 /* length adjustment */, false /* size includes size field */) {
@Override
protected void encode(ChannelHandlerContext ctx, ByteBuf msg, ByteBuf out) throws Exception {
ByteBuf outWithLittleEndian = out.order(ByteOrder.LITTLE_ENDIAN);
super.encode(ctx, msg, outWithLittleEndian);
}
})
...