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

Поиск:

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


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


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

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



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

мысли вслух:  мы разрабатываем класс.. 
Код

struct cls
{
    void on_imp1 (int);
    void on_imp2 (int, float);
};

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

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

структура должна быть ассоциирована с типом импульса.. и иметь функцию исполнения.. 
Код

struct on_event : dy::method<event>
{
      void operator () (event const&)  { event.invoke (bind (&That::mtd), that); } // где mtd - это имя метода реализации.. 
};


а можно поступить по другому, типизировать метод неким думми-типом 
Код

struct cls
{ 
    struct _imp1;
    struct _imp2;

    void on (_imp1, int);
    void on (_imp2, int, float);

};

таблицу соответсвий все равно придется делать..
или можно пойти qt -способом и кодогенирить нужную часть по исходнику..


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

struct cls
{ 
    DY_MTD (event1, on_event1, int i)
   {
   }

    DY_MTD (event2, on_event2, int i, float i)
   {
   }

};

как насчет такого ?

Добавлено @ 14:27
написал кучу разрозренных мыслей.. если что не понятно из этого, не заморачивайтесь..
в принципе интересует критика последнего блока кода..
в результате DY_MTD сгенерируется вспомогательная структура (с ди_именем) и функция..

Добавлено @ 14:37
вот предполагаемый синтаксис возбуждения и отправки импульса в сеть:

Код

   dy::connection _conn;
   dy::sender _out(_conn);

   impulse_1::emit(_out, 5);
   impulse_2::emit(_out, 3,2);

тоже хотелось бы услышать замечания по внешнему виду.. 

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


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


pattern`щик
****


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

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



Цитата(mes @  17.12.2010,  14:23 Найти цитируемый пост)
как насчет такого ?

для удобства, предполагаю генерировать имя структур из "имя_класса_ ## имя_метода_ ## порядковый_номер"
т.е. для приведенного класса, декларация будет такая:
Код

CLASS_BEG(cls)
    DY_MTD (event1, on_event1, int i)
    DY_MTD (event2, on_event2, int i, float i)
CLASS_END()

а структуры такие:
Код

struct cls_on_event1 {};
struct cls_on_event2 {};


Добавлено через 4 минуты и 59 секунд
кстати, не понял, первые аргументы макроса DY_MTD, это кто? smile

Добавлено через 7 минут и 19 секунд
on_event1, on_event2 - это методы, я так понял. верно?

Добавлено через 10 минут и 36 секунд
Цитата(boostcoder @  17.12.2010,  17:04 Найти цитируемый пост)
## порядковый_номер

это на случай перегрузки. кстати, как у нас с перегрузкой? я что-то не припомню примера с перегрузкой..

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


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


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

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



Цитата(boostcoder @  17.12.2010,  16:04 Найти цитируемый пост)
кстати, не понял, первые аргументы макроса DY_MTD, это кто? 

импульс и реальный метод..

Добавлено через 48 секунд
Цитата(boostcoder @  17.12.2010,  16:04 Найти цитируемый пост)
т.е. для приведенного класса, декларация будет такая:

чего мне это все не нравится..

Добавлено через 6 минут и 14 секунд
Цитата(boostcoder @  17.12.2010,  16:04 Найти цитируемый пост)
это на случай перегрузки. кстати, как у нас с перегрузкой?

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




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


pattern`щик
****


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

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



Цитата(mes @  17.12.2010,  20:43 Найти цитируемый пост)
импульс и реальный метод.. 

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


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


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

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



кстати как там насчет 
Цитата(mes @  17.12.2010,  13:23 Найти цитируемый пост)
вот предполагаемый синтаксис возбуждения 
 ?





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


pattern`щик
****


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

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



Цитата(mes @  17.12.2010,  20:43 Найти цитируемый пост)
чего мне это все не нравится..

согласен smile 

мне больше нравится непрепроцессорный генератор.
декларации тогда можно записывать в более естественном синтаксисе:
Код

class client_impl {
   void set_int(int);
   void set_string(const std::string&);
   int get_int();
   int get_int(int);
};

class server_impl {
   void set_int(int);
   void set_string(const std::string&);
   int get_int();
   int get_int(int);
};



Добавлено через 1 минуту и 14 секунд
Цитата(mes @  17.12.2010,  20:51 Найти цитируемый пост)
кстати как там насчет 
Цитата(mes @  17.12.2010,  13:23 )
вот предполагаемый синтаксис возбуждения 
 ?

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


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


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

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



Цитата(boostcoder @  17.12.2010,  19:50 Найти цитируемый пост)
а импульс откуда берется? его руками писать нужно? 

есть два объекта.. импульс и метод обработки.. 
импульс задается  тайпдефом от шаблона.. 
метод обработки определяется в реализации.. 
нам требуется синтаксис сопоставления одного другому smile



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


pattern`щик
****


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

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



Цитата(mes @  17.12.2010,  20:53 Найти цитируемый пост)
есть два объекта.. импульс и метод обработки.. 
импульс задается  тайпдефом от шаблона.. 
метод обработки определяется в реализации.. 
нам требуется синтаксис сопоставления одного другому

с этим я еще не разобрался, потому не понимаю.. разбираюсь.
PM WWW   Вверх
mes
Дата 17.12.2010, 21:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(boostcoder @  17.12.2010,  19:52 Найти цитируемый пост)
ничего не могу сказать, ибо не понимаю где и как это используется.. 

к примеру так :
Код

struct auth_window
{
    auth_window (dy::connection& c) : _out(c) {}
//..
    void on_login_btn()  { cts::user::emit(_out, "nick", "pass" ); }
    void on_logout_btn () { cts::quit::emit (_out, "bye"); }
//.. 
      dy::sender<cts::auth_cls> _out;
//    dy::sender<cts::user, cts::quit> _out;

};


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


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


pattern`щик
****


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

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



Цитата(mes @  17.12.2010,  21:00 Найти цитируемый пост)
cts::user.emit(_out, "nick", "pass" )

Цитата(mes @  17.12.2010,  21:00 Найти цитируемый пост)
cts::quit::emit (_out, "bye")

посылка команд, разве не посредством интерфейсов происходит? вроде определились с этим.
PM WWW   Вверх
mes
Дата 17.12.2010, 21:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(boostcoder @  17.12.2010,  20:03 Найти цитируемый пост)
вроде определились с этим. 

ну так я и жду критики.. приведите  тот же участок кода в желаемом на Ваш взгляд  виде..

Добавлено через 7 минут и 49 секунд
Цитата(boostcoder @  17.12.2010,  20:03 Найти цитируемый пост)
вроде определились с этим. 

верхний фронт еще не определили.. только дошли до него. до этого были лишь предположения как могло бы.. 



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


pattern`щик
****


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

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



вот:
Код

// реализация
struct auth_window {
   auth_window(net_client& net) {
      // реализациям, нужны только интерфейсы.
      _iface = net.get<server_impl>();
   }
   // к примеру, этот метод вызвала противоположная сторона.
   void on_login()  {
      // что-то выполняем...
      // ...

      // отвечаем.
      _iface->login("login", "password");
   }
   // а этот метод вызывается при клике по баттону
   void on_logout_btn() {
      // что-то выполняем...
      // ...

      // шлем команду...
      _iface->logout("bye");
   }

   iface_type _iface;
};


как-то так..

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


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


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

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



Цитата(mes @  17.12.2010,  20:00 Найти цитируемый пост)
void on_login_btn()  { cts::user::emit(_out, "nick", "pass" ); }

можно конечно так сделать _out << cts::user("nick", "pass");



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


pattern`щик
****


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

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



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


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


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

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



Цитата(boostcoder @  17.12.2010,  20:18 Найти цитируемый пост)
iface = _net.get<server_impl>();

как например если мы хотим чтоб импульсы адресовались себе же ?
я представляю так :
Код

struct auth_test
{
     void login () { cts::user (_out, name, pass); }
     void logout () { cts::quit (_out, "bye-bye");  }
    
     void on_user (std::string const&, std::string const&) {}
     void on_quit  (std::string const&) {}

      auth_test  () : _out(this) {}

      dy::dispather<..> _out;
};

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

а как это будет выглядить в Вашем примере ?

Цитата(boostcoder @  17.12.2010,  20:18 Найти цитируемый пост)
_iface->login(

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




--------------------
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.0830 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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