Использование ссылки на канал в таймер - PullRequest
0 голосов
/ 20 января 2012

У меня возникают некоторые проблемы при попытке использовать экземпляр Channel (получая из метода 'channelConnected') в Timer (org.jboss.netty.util.Timer). Потому что для использования внешней переменной в TimerTask необходимо, чтобы она была объявлена ​​как final.

То, что я пытаюсь сделать, - это когда клиент подключается, запускает таймер и, пока соединение работает, отправляет некоторую информацию через канал, потому что мне нужно использовать постоянные интервалы времени. Есть какой-либо способ сделать это?

Спасибо за вашу помощь.

public void channelConnected(ChannelHandlerContext ctx, ChannelStateEvent e) throws Exception {
        ...
        this.timerLocal.newTimeout(new TimerTask() {
            public void run(Timeout timeout) throws Exception {
                Channel ch = ctx.getChannel();
                ch.write("data data data");
            }
        }, 25, TimeUnit.SECONDS);
        ...
}

1 Ответ

1 голос
/ 20 января 2012

Я действительно не понимаю, в чем именно заключается ваша проблема, но я думаю, что то, что вы ищете, можно сделать также через IdleStateHandler и IdleStateAwareUpstreamHandler.

Просто вставьте IdleStateHandler, который вызовет событие простоя назаписывать пустые события каждые x секунд, а затем создавать пользовательский IdleStateAwareUpstreamHandler, который будет прослушивать эти события и запускать Channel.write (...)

...