Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > скрыть io_service, socket и прочее внутри класса


Автор: trupca 26.11.2013, 15:24
у меня есть класс с проверенным временем интерфейсом, который возбраняется менять:

Код

class foo {
public:
   foo(string ip, int port);

   bool is_connected();
   void send_msg(string);
   void disconnect();
private:
   ...
};



и передо мной стоит задача не добавляя ничего нового в public часть, кроме деструктора конечно (если он понадобится), переписать класс с использованием boost asio.

сам же вопрос весьма наивный: как такое кодить? меня посетило уже о-о-очень много идей как это можно было бы сделать, но проверив их уже с целую дюжину, я пришёл к тому что я просто не понимаю как в таком случае работать с бустом. я конечно изучил примеры из документации по asio, не все разумеется (мб там это и есть), но не нашёл там ни одной подобной реализации чего либо. поэтому, если вы знаете где можно посмотреть как нужно работают с библиотекой в таком случае, дайте, пожалуйста, ссылку. 

Автор: ChipNDale 30.11.2013, 07:59
Постановка задачи... странная.
Сразу вопрос: почему нельзя менять интерфейс? Он используется где-то в других частях программы? 
В таком случае пишем настоящий интерфейс с чисто виртуальными функциями и в клиентском коде пользуемся объектами через него.
boost::asio... А на чем уже было написано и почему потребовалось переписать?

Класс foo - говорящее, блин, название, но выглядит это все как клиентское подключение.
В общем случае сделать нужно следующее:
1. Создать объект io_service.
2. Создать сокет. Нюанс: в качестве аргумента сокет принимает io_service.
3. Вызвать волшебную функцию connect (синхронную или асинхронную).
4. Сказать io_service.run()

Из этого напрашивается вывод, что сам сокет можно сделать полем класса, а вот io_service уже не нужно - клиентов может быть много.
Все это я расписываю ради одной мысли: в конструктор просится дополнительный параметр io_service&. 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)