Передача значения в основную программу из обработчика канала в netty
Я пишу клиент, используя netty для обработки собственного протокола. Я определил обработчик, который расширяет SimpleChannelInboundHandler, который обрабатывает как отправку, так и получение сообщения.
public class ClientHandler extends SimpleChannelInboundHandler {
@Override
protected void channelRead0(ChannelHandlerContext channelHandlerContext, Object o) throws Exception {
log.info("Client received: " + ((ByteBuf)o).toString(CharsetUtil.UTF_8));
System.out.println("Client received: " + ((ByteBuf)o).toString(CharsetUtil.UTF_8));
}
@Override
public void channelActive(ChannelHandlerContext channelHandlerContext){
log.info("Client sent: $"+ new MessageRequest().toString() +"$");
channelHandlerContext.writeAndFlush(Unpooled.copiedBuffer((new MessageRequest().toString()), CharsetUtil.UTF_8));
}
@Override
public void exceptionCaught(ChannelHandlerContext channelHandlerContext, Throwable cause){
cause.printStackTrace();
channelHandlerContext.close();
}
}
Этот обработчик может распечатать ответ на консоль. Но так как я пишу клиента, который будет использоваться другой службой, мне нужно отправить ответ службе, которая вызывает моего клиента.
Пожалуйста, помогите мне отправить ответ, полученный в службу вызова.
1 ответ
Решение
Вы можете сохранить ссылку на ваш сервис прослушивания в вашем ClientHandler
класс и позвонить setMessage
метод класса обслуживания, чтобы дать ему сообщение от channelRead0
метод вашего обработчика.
Лучшим подходом было бы использовать шаблон Observer