0

私は 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内でイベントをトリガーできませんでした。私もうまくいかないと思います。CommandHandlerMessageHandlerchannelRegistered

チャネルがアクティブ化されたときにそれらを区別する方法はありますか? または、私のシナリオではどうすればよいですか? channelActiveウェルカム メッセージを送信したり、チャネルをグループに追加したりするなど、 で何かをしたいからです。ありがとう!

4

1 に答える 1