Добавление атрибута в канал перед созданием - PullRequest
0 голосов
/ 19 декабря 2018

Я ищу способ добавить атрибут в Channel перед его созданием.

Причина в том, что мне нужно связать Channel с каким-либо произвольным объектом, чтобы у меня былвозможность получить объект из канала (например, в методе channelActive(), где у меня есть Channel, и мне нужен связанный объект).

* Bootstrap предоставляет метод attr (), но атрибутдобавление этого способа доступно всем каналам, созданным из этого экземпляра Bootstrap.

Кроме того, добавление атрибута после создания канала проблематично, поскольку метод channelActive() может быть вызван до добавления атрибута.

Ответы [ 2 ]

0 голосов
/ 20 декабря 2018

Для тех, кому это нужно, вот решение:

ChannelFuture registerFuture;
try {
    registerFuture = castBootstrap.register().await();
} catch (InterruptedException e) {
    //Handle the exception
}

final Channel channel = registerFuture.channel();
channel.attr(MY_ATTR_KEY).set(/* some value */);

ChannelFuture connectFuture = channel.connect(/* Resolved socket address */);

Вместо того, чтобы полагаться на Bootstrap для создания Channel, приведенный выше код создает и регистрирует Channel и подключаетиспользуя интерфейс Channel.

0 голосов
/ 19 декабря 2018

Добавление через Bootstrap.attr(...) сделает атрибут доступным в channelActive(...), так как атрибут установлен до вызова fireChannelActive().

Если вы не хотите использовать этот метод, вы также можете просто добавить ChannelInboundHandler, который переопределяет channelRegistered(...), и добавить туда атрибут самостоятельно.

...