Передача значения в основную программу из обработчика канала в 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

Другие вопросы по тегам