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

Поиск:

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


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


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

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



Цитата(mes @  16.12.2010,  02:44 Найти цитируемый пост)
размышления вслух.. 

у метода (on_cts_user::invoke) сигнатура совпадает с хранимой в импульсе.. 
поэтому в текущей схеме мы повторяемся.. 
предположительно лучше вначале описать методы.. а после на их основе генерировать импульсы...
хотя можно внутри этой же структуры добавить идентификатор метода...

Добавлено через 2 минуты и 53 секунды
Цитата(boostcoder @  16.12.2010,  02:53 Найти цитируемый пост)
не понял..ну да ладно пока..

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

под методом подразумевается структура у которой есть метод инвоке..

Добавлено через 4 минуты и 46 секунд
наследование нужно было , когда я хотел использовать this структуры-метода, для диспатчеризации (crtp)



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


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


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

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



вот : http://liveworkspace.org/code/4c1431537f72...9daff2f7d5f7ab9
вроде работает  smile

Добавлено @ 15:53
предполагается что test_emit отправляет мигранта в соединение,
а dy::dispatch вызывается на другом конце для прибиндинного к нему объекта..

Добавлено @ 15:57
теперь образовалось несколько фронтов работы.. 
1.  привести описание протокола в удобный вид
2. докончить эммитера и диспетчера
3. добавить сериализацию
4. реализовыть соединения..

Добавлено @ 16:00
Цитата(boostcoder @  16.12.2010,  02:43 Найти цитируемый пост)
а реализации будут вынуждены наследоваться от "dy::inherited<cls, ...>::type" постоянно? 
 и.. все , нет никакого наследования в реализации
 smile

Добавлено @ 16:05
думаю сейчас картина понятна, тогда хотелось бы критики..

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


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


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


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


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

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



Цитата(mes @  16.12.2010,  14:51 Найти цитируемый пост)
  привести описание протокола в удобный вид

описание импульса лишнее.. его можно получить зная (прокси-)метод, и ид..
т.е. отправка сигнала может иметь вид :
 emit(cts::on_user, nick, pass) и в зависиммости от эммитера диспатчеризоавться сразу классу или конвертироваться в мигранта и дальше по руслу.. 



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


pattern`щик
****


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

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



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


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


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

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



вот чтоб лишнее не давило : http://liveworkspace.org/code/dfa7631c7201...5f49f8c1445d0a5

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


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


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


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

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



вот еще : http://liveworkspace.org/code/5fbca044de1c...6f8158409f2a4c9
набросок того, что видится в дальнейшем..
опорные пункты в комментах..

Добавлено через 5 минут и 18 секунд
Код

 template <class T>
struct on_user       
{
   enum { id = 1 };
   static void invoke (T& that, std::string const& s1
                              , std::string const& s2 )
   {
        that.on_cts_user (s1, s2);
   }
};

для начала хотелось бы это все за препроцессорить..

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

template <class T>
struct on_user       
{
     static void invoke (T& that, std::string const& s1
                              , std::string const& s2 )
   {
        that.on_cts_user (s1, s2);
   }
};
template <>
struct on_user<dy::meta>
{
     enum { id = 1 };
     typedef void(fn_t) (std::string const& s1, std::string const& s2 );
};



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


pattern`щик
****


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

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



откуда on_user и on_quit знают имена методов реализации?

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


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


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

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



Цитата(boostcoder @  16.12.2010,  16:34 Найти цитируемый пост)
откуда on_user и on_quit знают имена методов реализации?

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



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


pattern`щик
****


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

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



Цитата(mes @  16.12.2010,  17:43 Найти цитируемый пост)
от составителя протокола.. имена составляют абстрактный базовый не виртуальный интерфейс.. 

не понял.

и еще просьба: не могли бы Вы, четко, расписать, что нужно генерить, а что нет? ;)
PM WWW   Вверх
mes
Дата 16.12.2010, 17:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



это
Код

struct on_user    ...
struct on_quit ...

template <typename T>
struct cts_imps...
               

фактически является альтернативной формой записи этого:
Код

struct cts_imps
{
   virtual on_user(..) =0;
   virtual on_quit (..) =0;
};

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

Добавлено через 4 минуты и 24 секунды
Цитата(boostcoder @  16.12.2010,  16:46 Найти цитируемый пост)
не могли бы Вы, четко, расписать, что нужно генерить, а что нет? ;) 

четко не могу.. потому что я сам узнаю о чем то, после того как сделаю шаг..
но нам нужно получить шаблонную структуру, у которой есть статическая функция invoke
эта структура или ее специализация должна хранить ид метода и желательно typedef invoke функции (без this-argumenta)..

Добавлено через 4 минуты и 39 секунд
буду позже.. 

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


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


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


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

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



вот может внесет разъяснения :
Код

#define DY_METHOD(name, n, args_list, action ) \
template <class That>  \
struct name        \
{ \
   enum { id = n }; \
   static void invoke args_list \
   action \
};

DY_METHOD(on_user, 1
(That& that, std::string const& s1, std::string const& s2 ),
{
  that.on_cts_user (s1, s2);
})    
DY_METHOD(on_quit, 3
(That& that, std::string const& s1),
{
  that.on_cts_quit (s1);
})   



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


pattern`щик
****


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

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



понял.

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


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


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

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



cts можно делать не неймспейспом а структурой,
а "макросом метода", после определения структуры пуш_бак`ить к списку методов (cts_mtds::type)

Добавлено через 1 минуту и 21 секунду
тогда получится почти настоящее описание "абстрактного класса(интерфейса)"

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



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


pattern`щик
****


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

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



Цитата(mes @  16.12.2010,  18:44 Найти цитируемый пост)
а "макросом метода"

имеется в иду "DY_METHOD()" ?

Цитата(mes @  16.12.2010,  18:44 Найти цитируемый пост)
не знаю, как не повторяя аргументов, создать и тип и функцию..(внутри структуры)..

поясните.


зы
наконец-то и для меня работа нашлась smile 
PM WWW   Вверх
mes
Дата 16.12.2010, 18:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(boostcoder @  16.12.2010,  17:53 Найти цитируемый пост)
имеется в иду "DY_METHOD()" ?

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

Добавлено @ 19:00
т.е. по идеи что то то такое

Код

DY_CLASS(name) (
 DY_MTD (mtd1, 1, (arg1, arg2), { action })
 DY_MTD (mtd2, 2, (arg1), { action })
 DY_MTD (mtd3, 3, (arg1, arg2), { action }) 
)



а лучше без DY_MTD и id вначале.. 
Код

DY_CLASS(name) (
  (1,  mtd1,  (arg1, arg2),    { action })
  (2,  mtd2,  (arg1),          { action })
  (3,  mtd3,  (arg1, arg2),    { action }) 
)


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

Добавлено через 7 минут и 46 секунд
вобщем выбирайте на свой вкус, чтоб красиво было smile

Добавлено через 8 минут и 53 секунды
Цитата(boostcoder @  16.12.2010,  17:53 Найти цитируемый пост)
наконец-то и для меня работа нашлась 

 smile , теперь хоть видно что требуется..

Добавлено через 10 минут и 19 секунд
кстати насчет того что идет вызов по имени..
можно будет добавить еще один враппер , который будет превращать dy_class в класс сигналов ..
т.е. вызов по имени у нас "низкоуровневый способ"

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


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


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

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