Я пытаюсь написать небольшое приложение для обработки сетевого пакета. Надеюсь, что для облегчения теста это приложение может работать в двух режимах: режим локальной потоковой передачи (с использованием std::cin
) и режим сетевой потоковой передачи (с использованием asio) - в зависимости от того, предоставлена ли, например, в командной строке номер порта. Цель состоит в том, чтобы сделать его прозрачным для остальных клиентских классов, которые выполняют фактический анализ пакета, например, они могут получить ссылку на поток event_stream
, а затем выполнить синтаксический анализ как:
event_stream >> MsgHeader;
Предполагая, что класс MsgHeader
имеет оператор перегрузки >>.
Для режима локального потока: я просто возвращаю &cin
. Для сетевого режима, я надеюсь, что смогу сделать что-то вроде этого:
boost::asio::io_service io_s;
tcp::acceptor acc(io_s. tcp::endpoint(tcp::v4(), 1950));
tcp::iostream stream;
acc.accept(*stream.rdbuf()); // act as server, another client will write to it.
return &stream;
Но я немного растерялся, как заставить остальных клиентов "не знать", с каким потоком они имеют дело? Могу ли я просто объявить это как:
std::istream &in = get_event_stream();