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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> удаленный вызов. детали, реализация, архитектура, у темы новое название! 
:(
    Опции темы
mes
Дата 29.10.2010, 22:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



Цитата(boostcoder @  29.10.2010,  21:00 Найти цитируемый пост)
io_service и так представляет очередь. сам выполняет объекты которые в очереди. сам удаляет те, которые выполнил. размер очереди ограничивается только ресурсами системы.
зачем нам еще одна очередь? 

я не знал, и чего то не подумал о такой возможности..
 smile 
тогда  ссылка внутри в принципе не нужна..  а отправителя можно обозвать курьером или чем то в этом роде..

а чтоб пакет 100 раз не копировали, можно сделать его коровой... (CopyOnWrite)

но потом.. после того как все остальное закончим .. 


Это сообщение отредактировал(а) mes - 29.10.2010, 22:08


--------------------
PM MAIL WWW   Вверх
boostcoder
Дата 29.10.2010, 22:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

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



Цитата(mes @  29.10.2010,  22:06 Найти цитируемый пост)
я не знал, и чего то не подумал о такой возможности..

методом post() производится явная ставка объекта в очередь. все остальное что в asio асинхронное, работает таким-же образом, но не явно.

по поводу таймаутов на отправку: нет возможности удалить объект из очереди. но это реализуется выбросом исключения из объекта и повторным вызовом run() в catch блоке. читать тут. при том, io_service гарантирует, что все остальные объекты продолжат выполняться.

но это сейчас нам не нужно. и так работы еще огого)

Добавлено через 58 секунд
mes, скажите, чем именно мне сейчас заниматься?
а то все смешалось в кучу smile 
PM WWW   Вверх
mes
Дата 29.10.2010, 22:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



Цитата(boostcoder @  29.10.2010,  21:20 Найти цитируемый пост)
 скажите, чем именно мне сейчас заниматься?
а то все смешалось в кучу   

ну вот сбил Вас.. :(

показывайте что у вас есть.. только не кучей..
для начала покажите как выглядит клиент.. 
smile


--------------------
PM MAIL WWW   Вверх
boostcoder
Дата 29.10.2010, 22:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

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



вот:
Код

struct net_client {
   net_client()
      :_service(),
      _socket(_service),
      _thread(new std::thread(&boost::asio::io_service::run, &_service)),
      _sender(_socket),
      _receiver(_socket)
   {}

   template<typename T>
   void send(const T& o) {
      _sender.send(o);
   }

private:
   boost::asio::io_service _service;
   boost::asio::ip::tcp::socket _socket;
   std::shared_ptr<std::thread> _thread;

   rpc_sender _sender;
   rpc_receiver _receiver;
};


PM WWW   Вверх
mes
Дата 29.10.2010, 22:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



а пока закиньте плиз это в наш rpc_rev1.hpp
Код


template<class C, class A>
A& rpc_get_target(C&);

template <class C>
struct rpc_distributor
{
   void dispatch (rpc_packet const& pack)
   {
          auto it = m_map.find (pack.id);
          if (it != m_map.end() )
            it->second->dispatch (m_client, pack);
   }  
  
   struct i_invoker 
   {
      virtual void dispatch (client&, rpc_packet const&) =0;
   };
   typedef std::shared_ptr<i_invoker> i_invoker_ptr;
   
   template <class T, class A >
   struct invoker : i_invoker
   {
      typedef void (A::*mtd_t)(T const&);
      

      virtual void dispatch (C& c, rpc_packet const& pack)
      {
          (get_target<C, A>(c).*m_mtd)(rpc_unpack<T>(pack));
      }
      invoker(mtd_t mtd) : m_mtd(mtd) {}
      
      mtd_t m_mtd;
      
   };

   template <class T, class A >
   void set_handler (void (A::*mtd)(T const&) )
   {
       m_map[T::meta_id] = i_invoker_ptr (new invoker<T,A>(mtd) );
   }
   
   rpc_distributor (C &c) : m_client(c) {}
   C& m_client;
   
   std::map<int, i_invoker_ptr > m_map;
};


Добавлено @ 22:45
Цитата(boostcoder @  29.10.2010,  21:34 Найти цитируемый пост)
вот:

а где методы ?!


Это сообщение отредактировал(а) mes - 29.10.2010, 22:46


--------------------
PM MAIL WWW   Вверх
boostcoder
Дата 29.10.2010, 22:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

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



просто вставить в конец файла?

Добавлено через 1 минуту и 14 секунд
Цитата(mes @  29.10.2010,  22:44 Найти цитируемый пост)
а где методы ?!

во первых - я еще не закончил.
во вторых - мы с вами интенсивно общались последние два часа smile 
PM WWW   Вверх
mes
Дата 29.10.2010, 22:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



Цитата(boostcoder @  29.10.2010,  21:45 Найти цитируемый пост)
просто вставить в конец файла? 

ага


--------------------
PM MAIL WWW   Вверх
boostcoder
Дата 29.10.2010, 22:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

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



кстати, а какие именно методы ему нужны? send() ведь есть)
PM WWW   Вверх
mes
Дата 29.10.2010, 22:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



ну тогда и это чтоб не мешалось в другой файл ( test_ptcl.h)
Код

namespace ttt {
  struct conn  { enum {meta_id = 1000 }; 
                 void serialize (boost::archive::text_oarchive&, const unsigned int&) {}
                 void serialize (boost::archive::text_iarchive&, const unsigned int&) {}                 
               };
}

namespace sttc {
  struct ping  { enum {meta_id = 100 }; 
                 void serialize (boost::archive::text_oarchive&, const unsigned int&) {}
                 void serialize (boost::archive::text_iarchive&, const unsigned int&) {}                 
               }; 
  struct pong  { enum {meta_id = 101 };
                 void serialize (boost::archive::text_oarchive&, const unsigned int&) {}
                 void serialize (boost::archive::text_iarchive&, const unsigned int&) {}                 
               };     
}

namespace cts {
  struct user { enum {meta_id = 200 }; 
                void serialize (boost::archive::text_oarchive&, const unsigned int&) {}
                void serialize (boost::archive::text_iarchive&, const unsigned int&) {}                
              };
  struct quit { enum {meta_id = 201 }; 
                void serialize (boost::archive::text_oarchive&, const unsigned int&) {}
                void serialize (boost::archive::text_iarchive&, const unsigned int&) {}                
              };
  
}
namespace stc {
  struct welcome { enum {meta_id = 500 };
                   void serialize (boost::archive::text_oarchive&, const unsigned int&) {} 
                   void serialize (boost::archive::text_iarchive&, const unsigned int&) {}                     
                 };
}



Добавлено через 1 минуту и 2 секунды
Цитата(boostcoder @  29.10.2010,  21:47 Найти цитируемый пост)
кстати, а какие именно методы ему нужны? send() ведь есть) 

под методами я имел ввиду ваши биндеры и ассинхронные агенты..

Добавлено через 3 минуты и 33 секунды
помимо send , нужен еще set_handler ресивера.. а также connect, и disconnect.. 




--------------------
PM MAIL WWW   Вверх
boostcoder
Дата 29.10.2010, 22:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

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



Цитата(mes @  29.10.2010,  22:46 Найти цитируемый пост)
ага

вставил

Добавлено через 1 минуту и 45 секунд
Цитата(mes @  29.10.2010,  22:48 Найти цитируемый пост)
ну тогда и это чтоб не мешалось в другой файл ( test_ptcl.h)

в этот файл нужно заинклудить rpc-rev1.hpp ? или наоборот? или ничего не инклудить?
PM WWW   Вверх
mes
Дата 29.10.2010, 23:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



ой сорри.. я там оказывается в дистрибьютере забыл поменять get_target, на rpc_get_target..

Добавлено через 2 минуты и 7 секунд
Цитата(mes @  29.10.2010,  21:44 Найти цитируемый пост)
  virtual void dispatch (client&, rpc_packet const&) =0;

и тут плиз client на C



--------------------
PM MAIL WWW   Вверх
boostcoder
Дата 29.10.2010, 23:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

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



Цитата(mes @  29.10.2010,  22:48 Найти цитируемый пост)
под методами я имел ввиду ваши биндеры и ассинхронные агенты..

это то, что я предлагал в этом посте?
что в них изменить?
и как их назвать? send_holder и receive_holder ?
PM WWW   Вверх
mes
Дата 29.10.2010, 23:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



Цитата(boostcoder @  29.10.2010,  22:03 Найти цитируемый пост)
send_holder и receive_holder 

давайте пока остановимся на :
Код

outgoing 
incomming


Добавлено через 40 секунд
или даже сократить
Код

outgo
incom



--------------------
PM MAIL WWW   Вверх
boostcoder
Дата 29.10.2010, 23:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

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



Цитата(mes @  29.10.2010,  23:01 Найти цитируемый пост)
забыл поменять get_target, на rpc_get_target..

он так и зовется:
Код

template<class C, class A>
A& rpc_get_target(C&);


Цитата(mes @  29.10.2010,  23:01 Найти цитируемый пост)
и тут плиз client на C

сделал.

файл test_ptcl.h тоже.

Добавлено через 2 минуты и 9 секунд
Цитата(mes @  29.10.2010,  23:08 Найти цитируемый пост)
или даже сократить
outgo
incom

что в них изменить, помимо выноса функций упаковки/распаковки ?
PM WWW   Вверх
mes
Дата 29.10.2010, 23:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



Цитата(boostcoder @  29.10.2010,  22:10 Найти цитируемый пост)
он так и зовется:

его я поменял, а вот в invoker::dispatch забыл :(



--------------------
PM MAIL WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
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.0972 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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