我使用的是 4.0.4 版本。我的项目中有两种类型的协议。一个是消息,另一个是命令。
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());
}
更糟糕的是它无法触发channelActive
my CommandHandler
and中的事件MessageHandler
。我认为channelRegistered
也不行。
激活通道时有什么方法可以区分它们吗?或者我应该如何为我的场景做些什么?因为我想做一些事情channelActive
,比如发送欢迎信息或将频道添加到群组。谢谢!