Передача значения в основную программу из обработчика канала в netty - PullRequest
0 голосов
/ 17 октября 2018

Я пишу клиенту, использующему 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 Ответ

0 голосов
/ 17 октября 2018

Вы можете сохранить ссылку на службу прослушивания в своем классе ClientHandler и вызвать метод setMessage класса обслуживания, чтобы передать ему сообщение из метода channelRead0 вашего обработчика.

Лучшим подходом было бы использовать шаблон Observer

...