私は 4.0.4 バージョンを使用しています。私のプロジェクトには 2 種類のプロトコルがあります。1 つはメッセージ、もう 1 つはコマンドです。
例を参照して、それらをうまく区別しますportunification
。しかし、識別ロジックがdecode
メソッド内にコーディングされていることがわかりました。つまり、最初にメッセージを送信することによってのみ、それらを識別できました。コードは次のとおりです。
@Override
protected void decode(ChannelHandlerContext ctx, ByteBuf in,
List<Object> out) throws Exception {
if (in.readableBytes() < 4) {
return;
}
int identifier = in.getUnsignedByte(in.readerIndex());
if(identifier == 'C') {
switchToCommand(ctx);
} else {
switchToMessage(ctx);
}
}
private void switchToCommand(ChannelHandlerContext ctx) {
ChannelPipeline p = ctx.pipeline();
p.addLast(new CommandHandler());
p.remove(this);
}
private void switchToMessage(ChannelHandlerContext ctx) {
ChannelPipeline p = ctx.pipeline();
p.addLast(new MessageHandler());
}
さらに悪いことに、 my andchannelActive
内でイベントをトリガーできませんでした。私もうまくいかないと思います。CommandHandler
MessageHandler
channelRegistered
チャネルがアクティブ化されたときにそれらを区別する方法はありますか? または、私のシナリオではどうすればよいですか? channelActive
ウェルカム メッセージを送信したり、チャネルをグループに追加したりするなど、 で何かをしたいからです。ありがとう!