Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> скрыть io_service, socket и прочее внутри класса, boost asio 
:(
    Опции темы
trupca
Дата 26.11.2013, 15:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 22.7.2008

Репутация: нет
Всего: нет



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

Код

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

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



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

сам же вопрос весьма наивный: как такое кодить? меня посетило уже о-о-очень много идей как это можно было бы сделать, но проверив их уже с целую дюжину, я пришёл к тому что я просто не понимаю как в таком случае работать с бустом. я конечно изучил примеры из документации по asio, не все разумеется (мб там это и есть), но не нашёл там ни одной подобной реализации чего либо. поэтому, если вы знаете где можно посмотреть как нужно работают с библиотекой в таком случае, дайте, пожалуйста, ссылку. 
PM MAIL   Вверх
ChipNDale
Дата 30.11.2013, 07:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 11.6.2010

Репутация: 1
Всего: 1



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

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

Из этого напрашивается вывод, что сам сокет можно сделать полем класса, а вот io_service уже не нужно - клиентов может быть много.
Все это я расписываю ради одной мысли: в конструктор просится дополнительный параметр io_service&. 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0599 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.