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

Поиск:

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


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


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

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



на текущий момент агент может описываться так :
Код


struct client
{    
     typedef discoly::port < discoly::port_traits
                           < cts_types, stc_types  >
             > port_t;
         
     typedef delivery<client> proxy_t;
     typedef discoly::connection connection_t;
     
     client (connection_t& conn) : _port (conn), _proxy( { this } )
     {
       _port.connect_defseq (&_proxy);
     }
     
     void on_msg3(double, int = 5) 
     {
       std::cout << "client::on_msg3() ";
       
     }
     void on_msg4(int, int)
     {
       std::cout << "client::on_msg4() ";     
     }
  private:
      port_t _port;  
      proxy_t _proxy;
    
};

где delivery карта соотношений событий к методам :
Код

struct msg1 : discoly::msg<1> {};
struct msg2 : discoly::msg<2> {};
struct msg3 : discoly::msg<3> {};
struct msg4 : discoly::msg<4> {};

typedef boost::mpl::vector
       <msg3,msg4> cts_types;  

typedef boost::mpl::vector
       <msg3,msg4> stc_types;        

template <typename T>
struct delivery 
{
    T * o;
    void handle (msg1 const&) { o->on_msg1(); }
    void handle (msg2 const&) { o->on_msg2(5); }
    void handle (msg3 const&) { o->on_msg3(4.2); }   
    void handle (msg4 const&) { o->on_msg4(1,1); }   
};

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

http://liveworkspace.org/code/90bd6087fc1b...1d27683fc12c5a9
тепрь бы убрать бы переменную прокси из определения класса..

Это сообщение отредактировал(а) mes - 29.11.2010, 20:05


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


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


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

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



Цитата(mes @  29.11.2010,  12:29 Найти цитируемый пост)
где delivery

чего то она мне не нравится.. пока убрал : 
http://liveworkspace.org/code/42628d25ece7...a48ade5faf3c053

интуиция подсказывает, что  есть более удобный способ.. 



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


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


pattern`щик
****


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

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



Цитата(mes @ 28.11.2010,  14:53)
вот прообраз диспетчера и вспомогательных сущностей :

http://liveworkspace.org/code/ce940f8a0882...c29cdacfb16661e

Добавлено @ 15:02
вот с контролем типов
http://liveworkspace.org/code/b28f277cf3cf...4c3307df3fb9449

скажите, для чего у класса i_method и method метод clone() ?
т.е. просто не понимаю его назначения.

Добавлено @ 00:10
Цитата(mes @ 28.11.2010,  15:35)
терь порт может отправлять и принимать сообщения :
http://liveworkspace.org/code/3b8e04b948ea...7926cb0bac61a37

Добавлено @ 15:46
закоммител ...  вторая фаза закончена..

boostcoder, просьба проверить на компиляцию и если будут вопросы по коду готов ответить..


P.S. в коде пока только подключение (методов, респондера .. ), а разрыв пока не рассматривался..

с этим все понятно.

Добавлено @ 00:14
Цитата(mes @ 28.11.2010,  19:06)
нарезал из вашего net_io tcp_connection.. но встал вопросик в какие моменты должны блокироваться мьютексы ?..

в моем варианте, мьютексы блокируют как отправку сообщений, так и прием. сделано для возможности "горячего" старта сервисов. т.к. у сервисов больше полномочий и возможностей.

Добавлено @ 00:20
Цитата(mes @  28.11.2010,  19:24 Найти цитируемый пост)
изменил последний пример под предварительное представление конечного агента...
http://liveworkspace.org/code/8444b29e0932...978cbcf8a25a7b0

что Вы подразумеваете под словом "агент" ?

Цитата(mes @  28.11.2010,  19:24 Найти цитируемый пост)
терь надо подумать об удобной регистрации..

это о том, что должно быть вместо того что в тебе конструктора?:
Код

  agent (discoly::connection& c) :  _port(c) 
  {
   _port.add_method (
     discoly::make_method<my_msg>(
         std::bind(&agent::handle, this, std::placeholders::_1 )
     )
   );
  }



Это сообщение отредактировал(а) boostcoder - 2.12.2010, 00:39
PM WWW   Вверх
boostcoder
Дата 2.12.2010, 00:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


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

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



Цитата(mes @  29.11.2010,  13:29 Найти цитируемый пост)
struct msg1 : discoly::msg<1> {};
struct msg2 : discoly::msg<2> {};
struct msg3 : discoly::msg<3> {};
struct msg4 : discoly::msg<4> {};
typedef boost::mpl::vector
       <msg3,msg4> cts_types;  
typedef boost::mpl::vector
       <msg3,msg4> stc_types;        
template <typename T>
struct delivery 
{
    T * o;
    void handle (msg1 const&) { o->on_msg1(); }
    void handle (msg2 const&) { o->on_msg2(5); }
    void handle (msg3 const&) { o->on_msg3(4.2); }   
    void handle (msg4 const&) { o->on_msg4(1,1); }   
};

я правильно понимаю, что где-то здесь, должны десериализоваться значения аргументов и подставляться в методы?
а так же, скажите, код десериализации и подстановку аргументов методов Вы предполагаете писать руками? или все же генерировать?

Добавлено через 5 минут и 37 секунд
Цитата(mes @  29.11.2010,  13:29 Найти цитируемый пост)
http://liveworkspace.org/code/90bd6087fc1b...1d27683fc12c5a9
тепрь бы убрать бы переменную прокси из определения класса..

в коде есть это:
Код

  template <typename MList, typename D>
  void connect_seq (D *d)
  {
     boost::mpl::for_each<MList> ( msg_connector<port,D>(this,d) );
  }
  template <typename D>
  void connect_defseq (D *d)
  {
     connect_seq<incom_list_t> ( d );
  }

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

Добавлено через 8 минут и 55 секунд
вроде больше вопросов нет.
поэкспериментирую..
PM WWW   Вверх
mes
Дата 2.12.2010, 01:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(boostcoder @  1.12.2010,  23:29 Найти цитируемый пост)
я правильно понимаю, что где-то здесь, должны десериализоваться значения аргументов и подставляться в методы?

нет.. msg это уже десерилизованное.. десерилизация проходит когда пакет превращается в сообщение... 
( но, чувствуется,  две сущности это лишние, и одну из них нужно будет искоренить )

Цитата(boostcoder @  1.12.2010,  23:29 Найти цитируемый пост)
скажите, в чем разница между этими двумя методами? какой из них в каких целях предполагается использовать?

один подписывает на избранные , а другой (defseq) на все которые принимаются диспетчером..
(тут тоже немножко лишних деталей, но не хватает реального примера (схемы), на котором можно было бы отсечь лишнее )

Добавлено через 2 минуты и 19 секунд
Цитата(boostcoder @  1.12.2010,  23:29 Найти цитируемый пост)
я правильно понимаю, что где-то здесь, должны десериализоваться значения аргументов и подставляться в методы?

планировалось, что будет примерно в таком стиле 
Код

   void handle (T*o, msg2 const& m) { o->on_msg2(m.i, m.j, m.k); }



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


pattern`щик
****


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

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



Цитата(mes @  2.12.2010,  01:25 Найти цитируемый пост)
нет.. msg это уже десерилизованное.. десерилизация проходит когда пакет превращается в сообщение... 
( но, чувствуется,  две сущности это лишние, и одну из них нужно будет искоренить )

понял.

Цитата(mes @  2.12.2010,  01:25 Найти цитируемый пост)
один подписывает на избранные , а другой (defseq) на все которые принимаются диспетчером..

я так и предполагал. понял.

Цитата(mes @  2.12.2010,  01:25 Найти цитируемый пост)
(тут тоже немножко лишних деталей, но не хватает реального примера (схемы), на котором можно было бы отсечь лишнее )

поясните..

Цитата(mes @  2.12.2010,  01:25 Найти цитируемый пост)
планировалось, что будет примерно в таком стиле 
код C++
1:
   void handle (T*o, msg2 const& m) { o->on_msg2(m.i, m.j, m.k); }

понял.

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


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


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

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



Цитата(boostcoder @  2.12.2010,  00:38 Найти цитируемый пост)
поясните..

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





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


pattern`щик
****


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

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



Цитата(mes @  2.12.2010,  01:54 Найти цитируемый пост)
а на "одноклеточных" чатах, на коих я "тренируюсь" далеко не уедишь :(

 smile 
представьте онлайн игрушку ;)
к примеру ту, что у Вас в подписи. мысленно, прикрутите к ней статистику(если таковой не имеется), планирование турниров, рассылку новостей об игре/турнирах/условиях/призах. вот и получится реальная задача подобная моей smile 
PM WWW   Вверх
mes
Дата 2.12.2010, 02:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(boostcoder @  2.12.2010,  00:58 Найти цитируемый пост)
представьте онлайн игрушку ;)

представить могу .. но не то что требуется.. :(

Цитата(boostcoder @  2.12.2010,  00:58 Найти цитируемый пост)
вот и получится реальная задача подобная моей

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

Цитата(boostcoder @  2.12.2010,  00:58 Найти цитируемый пост)
к примеру ту, что у Вас в подписи.

так из за нее и "связался" с  Вашей задачей, чтоб мысли выстроить 
smile

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

Добавлено через 5 минут и 38 секунд
P.S. а чего это у меня рисунки не выкладываются ?!


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


pattern`щик
****


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

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



Цитата(mes @  2.12.2010,  02:06 Найти цитируемый пост)
а вот как будет представлен код пользователя дисколи, не до конца.. 

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

Добавлено через 42 секунды
Цитата(mes @  2.12.2010,  02:06 Найти цитируемый пост)
так из за нее и "связался" с  Вашей задачей

значит угадал smile

Добавлено через 2 минуты и 14 секунд
Цитата(mes @  2.12.2010,  02:06 Найти цитируемый пост)
давайте для начала составим пользовательскую часть клиента так, как будто у нас есть готовая дисколи, чтоб видно, какие ей операции нужно выполнять.. 

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


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


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

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



Цитата(boostcoder @  2.12.2010,  01:15 Найти цитируемый пост)
я вижу это так:

немножко не туда.. не знаю даже как объяснить.. ну вот есть у нас набор инструментов для связи с сервером.. а что дальше ?
как будет выглядить то, что будет строиться с их помошью ?


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


pattern`щик
****


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

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



Цитата(mes @  2.12.2010,  02:06 Найти цитируемый пост)
P.S. а чего это у меня рисунки не выкладываются ?! 


оцените: _http://clip2net.com/
превосходный сервис для обмена скринами и картинками. ничего никуда вручную заливать не нужно. выделили область экрана, нажали "отправить", а в ответ получили ссылку. все.


Добавлено через 1 минуту и 51 секунду
Цитата(mes @  2.12.2010,  02:18 Найти цитируемый пост)
ну вот есть у нас набор инструментов для связи с сервером.. а что дальше ?
как будет выглядить то, что будет строиться с их помошью ? 

непонимаю smile 

Это сообщение отредактировал(а) boostcoder - 2.12.2010, 02:20
PM WWW   Вверх
mes
Дата 2.12.2010, 02:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



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

подходит такая схема или требуется как то по другому ?.. 

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

Добавлено через 2 минуты и 44 секунды
Цитата(mes @  2.12.2010,  01:28 Найти цитируемый пост)
что то связанное с тем, если агенты будут не просто писать в консоль, а взаимодействоватьс гуи.. 

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


Это сообщение отредактировал(а) mes - 2.12.2010, 02:29


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


pattern`щик
****


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

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



Цитата(mes @  2.12.2010,  02:28 Найти цитируемый пост)
один клиент содержит набор агентов

для начала скажите, что подразумевается под словом "агент" ?
у меня, почему-то, до сих пор не возникло такого термина..
PM WWW   Вверх
mes
Дата 2.12.2010, 02:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



хотя может эти проблемы и не относятся к дисколи.. 



--------------------
PM MAIL WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

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

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

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

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


 




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


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

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