2015-02-07 5 views
0

как я могу отправить сообщение с сервера клиенту с помощью Netty? Я знаю, что вы можете сделать это, какNetty IO отправить сообщение клиенту

for (Channel c : channels1) { 
    c.writeAndFlush("TEXT \r\n"); 
    } 

но можно использовать только внутри ChatServerHandler класса. Есть ли способ отправки сообщений клиенту или как я могу сделать метод, который я могу назвать, например,

sendMessageToServer("MESSAGE"); 

void sendMessageToServer(String message) { 
final ChannelGroup channels = new DefaultChannelGroup(GlobalEventExecutor.INSTANCE); 
     for (Channel c : channels) { 
     c.writeAndFlush("TEXT \r\n"); 
     } 
} 

? Если я получаю каналы, как в ChatServerHandler с помощью

final ChannelGroup channels = new DefaultChannelGroup(GlobalEventExecutor.INSTANCE); 

Я получаю размер канала 0.

ответ

0

final ChannelGroup channels = new DefaultChannelGroup(GlobalEventExecutor.INSTANCE);
Это создает новый ChannelGroup ничего внутри.

Вы должны иметь класс, распространяемый SimpleChannelInboundHandler<?>.
Метод channelActive(ChannelHandlerContext chc) вызывается, когда что-то связано. Просто добавьте Channel экземпляр на ваш channelschannels.add(chc.channel());
Возможно, вам придется публиковать свой ChannelGroup, чтобы его можно было повеселиться повсюду. Удачи.

+0

У меня уже есть метод channelAdded, и я добавляю каналы в группу, и после того, как клиент подключается, группа имеет размер 1, но я не знаю, как использовать его для получения каналов для отправки сообщения. Невозможно получить доступ к каналу ChannelGroup извне, потому что я получаю статическую ошибку или что-то в этом роде. – Broadwell

+0

Вот что я сказал. Вам нужно сделать свою «ChannelGroup» общедоступной. Попытайтесь сделать его «public static», чтобы вы могли получить к нему доступ напрямую. 'public static ChannelGroup channels = new DefaultChannelGroup (GlobalEventExecutor.INSTANCE);' – Jeremy