在ConnectionHandler中,我创建了一个Session对象。我只需要每个客户端有一个Session对象,这就是我在ConnectionHandler中初始化它的原因,因为channelActive方法每个客户端只调用一次。 我希望将该会话传递给PacketHandler。 我该怎么办?
答案 0 :(得分:10)
您可以使用Channel.attr(...)。set(...)和Channel.attr(...)。get(...)来获取此类内容。检查javadocs。
这样的事情:
public static AttibuteKey<String> MY_KEY = AttributeKey.valueOf("MY_KEY");
public final class ConnectHandler extends ChannelInboundHandlerAdapter {
@Override
public void channelActive(ChannelHanderContext ctx) {
ctx.channel().attr(MY_KEY).set("Whatever");
}
}
public final class NextHandler extends ChannelInboundHandlerAdapter {
@Override
public void channelRead(ChannelHandlerContext ctx, Object msg) {
String value = ctx.channel().attr(MY_KEY).get();
// do something
}
}