Netty клиентский конвейер получает ответ на конкретный объект? - PullRequest
0 голосов
/ 28 февраля 2019

Поскольку все примеры, которые я видел, просто выводили на консоль в ClientHandler, я задаюсь вопросом о правильном способе передачи этих данных в конкретный объект.Допустим, в некотором классе контроллеров пользователь может нажать кнопку, чтобы запросить или обновить некоторые данные с сервера.У меня есть ссылка на канал в этом объекте, который отправляет запрос на сервер, и, как только сервер завершил работу, он отправляет его обратно, где он попадает в конвейер клиентов.Теперь мне нужно вывести данные в объект, который их запросил.

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

Или, возможно, я могу просто реализовать интерфейс обработчика для этого класса контроллера?Когда он ожидает данные, я добавляю его в конвейер, а когда он получает данные, я удаляю его из конвейера?Некоторые псевдо:

public class SomeControllerClass extends ChannelInboundHandlerAdapter {

    //...

    public void onButtonClick() {
        // Send a request to the server.
        channel().writeAndFlush(new someDataRequest);
        // Add this controller to the pipeline to handle the response once it arrived and decoded.
        channel().pipeline().addLast("someHandler", this);
    }

    @Override
    public void channelRead(ChannelHandlerContext ctx, Object msg) {
        // Do stuff with the data in this class
        // Remove this from the pipeline.
        channel().pipeline().remove("someHandler");
    }

    //...
}

Это где-нибудь в общих чертах о том, как мне нужно подойти к этой проблеме?Я удаляю его из конвейера, потому что беспокоюсь, что другие объекты, которые ожидают, что аналогичные данные тоже будут обрабатывать данные.

Другими словами, все, что я пытаюсь сделать, - это всплывающее окно с надписью «загрузка»."пока данные не получены с сервера и не готовы представить их в этом всплывающем окне.

...