Поскольку все примеры, которые я видел, просто выводили на консоль в 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");
}
//...
}
Это где-нибудь в общих чертах о том, как мне нужно подойти к этой проблеме?Я удаляю его из конвейера, потому что беспокоюсь, что другие объекты, которые ожидают, что аналогичные данные тоже будут обрабатывать данные.
Другими словами, все, что я пытаюсь сделать, - это всплывающее окно с надписью «загрузка»."пока данные не получены с сервера и не готовы представить их в этом всплывающем окне.