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

Поиск:

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


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


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

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



Цитата(boostcoder @  4.11.2010,  19:55 Найти цитируемый пост)
 если ее в нем нет - диспетчеризируем по стандартной схеме.

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



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


pattern`щик
****


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

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



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

Добавлено через 5 минут и 54 секунды
Цитата(mes @  4.11.2010,  21:00 Найти цитируемый пост)
т.е два потока ? синхронныей и ассинхронный ?

да.

Цитата(mes @  4.11.2010,  21:00 Найти цитируемый пост)
и зачем такие усложнения ?

но такая возможность ведь может пригодится smile 

Цитата(mes @  4.11.2010,  21:00 Найти цитируемый пост)

и еще куча ненужных сложностей.. 

так это же прикольно smile 
PM WWW   Вверх
mes
Дата 4.11.2010, 21:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(boostcoder @  4.11.2010,  20:10 Найти цитируемый пост)
а предлагаю реализовать _возможность_ожидать_ответ_на_некоторый_запрос_в_любую_сторону_

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



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


pattern`щик
****


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

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



Цитата(mes @  4.11.2010,  21:25 Найти цитируемый пост)
а нельзя ли это реализовыватьвторой способ  потом, после того как опробируете первый ?

но Вы поняли о чем я хотел сказать?
это же классно когда есть выбор smile 

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


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


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

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



Цитата(boostcoder @  4.11.2010,  20:29 Найти цитируемый пост)

но Вы поняли о чем я хотел сказать?
это же классно когда есть выбор  

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

Добавлено @ 21:41
ну например так 
Код


template <class Q, class R>
R send(Q const& q)
{
    return wait_for<Q> ();
}
struct query {};
struct response {};

response re = send (query());



Добавлено @ 21:43
 smile 
Цитата(boostcoder @  4.11.2010,  20:10 Найти цитируемый пост)
. иначе о чем мы тут вообще 30страниц писали

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



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


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


Бывалый
*


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

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



остальные внимательно "слушают")
PM MAIL   Вверх
boostcoder
Дата 4.11.2010, 21:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


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

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



Цитата(mes @  4.11.2010,  21:36 Найти цитируемый пост)
ну например так 

а каким образом реализовать реестр? как регистрировать? и как обрабатывать то, что пришло пока ожидали ответ?
какие у Вас мысли по этому поводу?

Добавлено через 1 минуту и 28 секунд
Цитата(mes @  4.11.2010,  21:36 Найти цитируемый пост)
остальные почему то воздерживаются

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

Добавлено через 3 минуты и 14 секунд
Цитата(Sahab @  4.11.2010,  21:45 Найти цитируемый пост)
остальные внимательно "слушают") 

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


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


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

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



Цитата(boostcoder @  4.11.2010,  20:45 Найти цитируемый пост)
а каким образом реализовать реестр? как регистрировать? и как обрабатывать то, что пришло пока ожидали ответ?
какие у Вас мысли по этому поводу? 

сорри, но в этом направлении я Вам не советник, так как подобный подход противоречит моим вкусам.. 


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


pattern`щик
****


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

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



реализовал проверку на возвращаемый тип:
Код

#include <iostream>
#include <boost/signals2.hpp>
#include <boost/mpl/if.hpp>

template<typename>
struct real_call;

/***************************************************************************/

struct type1 {
   enum { meta_id = 0 };
};

struct type2 {
   enum { meta_id = 1 };
};

struct type3 {
   enum { meta_id = 2 };
   int code;
   std::string msg;
};

/***************************************************************************/

template<>
struct real_call<type1> {
   typedef boost::signals2::signal<void(const type1&)> handler_t;
   
   real_call()
   {}

   void call(const void* ptr) {
      if ( ret ) {
         std::cout << "call<type1> return" << std::endl;
      } else {
         std::cout << "call<type1> no return" << std::endl;
      }
   }

private:
   enum { ret = !boost::is_same<handler_t::slot_type::result_type, void>::type::value };
};

template<>
struct real_call<type2> {
   typedef boost::signals2::signal<int(const type2&)> handler_t;
   
   real_call()
   {}

   void call(const void* ptr) {
      if ( ret ) {
         std::cout << "call<type2> return" << std::endl;
      } else {
         std::cout << "call<type2> no return" << std::endl;
      }
   }

private:
   enum { ret = !boost::is_same<handler_t::slot_type::result_type, void>::type::value };
};

template<>
struct real_call<type3> {
   typedef boost::signals2::signal<std::string(const int&, const std::string&)> handler_t;
   
   real_call()
   {}

   void call(const void* ptr) {
      if ( ret ) {
         std::cout << "call<type3> return" << std::endl;
      } else {
         std::cout << "call<type3> no return" << std::endl;
      }
   }

private:
   enum { ret = !boost::is_same<handler_t::slot_type::result_type, void>::type::value };
};

/***************************************************************************/

template<typename T>
void call() {
   real_call<T> o;
   o.call(0);
}

/***************************************************************************/

int main() {
   call<type1>();
   call<type2>();
   call<type3>();
}

/***************************************************************************/


http://liveworkspace.org/code/4e3c82d8d9e6...3764fa1b24c5a0c

Добавлено через 9 минут и 19 секунд
Цитата(mes @  4.11.2010,  21:49 Найти цитируемый пост)
сорри, но в этом направлении я Вам не советник

ну хотя бы мыслями обменяться? smile 

я вот как это представляю:
на клиенте и сервере между on_inkom() и dispatch() нужно всунуть прокси. который во входящих будет искать те ID`ы, которые зареганы в реестре. все остальные, просто пропускать в dispatch().
так?

Добавлено через 14 минут и 33 секунды
еще один вопрос:
как быть с указателями в аргументах?
сериализовать их можно(не знаю все ли), но вот десериализовать никак. наверное нужно метакода наворотить для проверки на предмет указателя. и если это указатель - ...то что делать?
PM WWW   Вверх
boostcoder
Дата 4.11.2010, 22:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


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

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



Цитата(mes @  4.11.2010,  21:36 Найти цитируемый пост)
практически вдвоем

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


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


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

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



Цитата(boostcoder @  4.11.2010,  20:50 Найти цитируемый пост)
ериализовать их можно(не знаю все ли), но вот десериализовать никак. наверное нужно метакода наворотить для проверки на предмет указателя. и если это указатель - ...то что делать? 

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



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


pattern`щик
****


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

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



Цитата(mes @  4.11.2010,  22:08 Найти цитируемый пост)
в сетевом протоколе указателей и ссылок быть не должно..

оно то и понятно. иначе это просто имитация smile 
как вариант, вставить mpl assert`ы... понятно.

Добавлено @ 22:11
хотя нет..! есть пример. пишу..

Добавлено @ 22:22
к примеру, юзер задекларировал метод так:
Код

   DECLARE_METHOD(int, method, const std::string&, int, const char*)

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

другой пример:
Код

   DECLARE_METHOD(void, method, const std::vector<std::vector<std::string>>&, int)

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

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


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


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

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



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




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


pattern`щик
****


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

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



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


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


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

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



Код

struct stc::user_list_t
{  
     std::vector<>  users;
};
rpc_packet user_list (std::vector<std::string> const&)
{        
}   


Цитата(boostcoder @  5.11.2010,  00:03 Найти цитируемый пост)
а это по поводу какой моей мысли, мысли? 


Цитата(boostcoder @  4.11.2010,  21:10 Найти цитируемый пост)
тут, для первого аргумента, если убрать референс, то при передаче его по значению будет происходить копирование. исходя из этого, предлагаю, референсы оставить.



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


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


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

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