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

Поиск:

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


pattern`щик
****


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

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



Цитата(mes @  14.11.2010,  17:57 Найти цитируемый пост)
не знаю, в какую сторону развился за это время.. но как я представляю, имхо, тут что-то производное
от "какое-то взаимодействие/общение объектов"..

идея та же.
метафайл:
Код

class client_side: client_metacont {
   void set_int(int);
   void set_string(const std::string&);
};

class server_side: server_metacont {
   void set_int(int);
   void set_string(const std::string&);
};

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

использование:
Код


#include "decl1.hpp"

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

namespace impl {

struct client_side: i_client_side {
   client_side(detail::distributor& d):i_client_side(d) {}

   void set_int(int i) {
      std::cout << "client_side::set_int(" << i << ");" << std::endl;
   }

   void set_string(const std::string& s) {
      std::cout << "client_side::set_string(" << s << ");" << std::endl;
   }
};

} // namespace impl;

typedef boost::mpl::vector<impl::client_side*> client_metacontainer;
/***************************************************************************/

namespace impl {

struct server_side: i_server_side {
   server_side(detail::distributor& d):i_server_side(d) {}

   void set_int(int i) {
      std::cout << "server_side::set_int(" << i << ");" << std::endl;
   }

   void set_string(const std::string& s) {
      std::cout << "server_side::set_string(" << s << ");" << std::endl;
   }
};

} // namespace impl;

typedef boost::mpl::vector<impl::server_side*> server_metacontainer;
/***************************************************************************/

void ping_time(boost::uint32_t pt) {
   std::cout << "ping time = " << pt << std::endl;
}

int main() {
   try {
      const boost::uint16_t port = 44550;
      net_server<server_metacontainer> server(port);
      server.set_ping_callback(ping_time);
      ifaces::client_side::shared_ptr c = server.get<ifaces::client_side>();

      net_client<client_metacontainer> client("127.0.0.1", port);
      client.set_ping_callback(ping_time);
      ifaces::server_side::shared_ptr s = client.get<ifaces::server_side>();
      while ( true ) {
         s->set_int(time(0));
         s->set_string("33");

         c->set_int(time(0)+10);
         c->set_string("44");

         boost::this_thread::sleep(boost::posix_time::milliseconds(500));
      }
   } catch ( const std::exception& e ) {
      std::cout << "int main(): " << e.what() << std::endl;
   } catch ( ... ) {
      std::cout << "int main(): unknown exception" << std::endl;
   }
}

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



Добавлено @ 18:20
ах да...Вы ведь не в курсе... разработал некий концепт позволяющий расширять функциональность протокола путем написания сервисов к нему.
"set_ping_callback();" собственно и реализован как дополнительный сервис. встроенный. но есть возможность отключить его(но пока получаю access violation smile ).
еще хочу реализовать сервис_таймаутов/сервис_транспорта_исключений/сервис_сжатия_пакетов. пока вроде все.


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


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


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

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



Цитата(boostcoder @  14.11.2010,  17:15 Найти цитируемый пост)
 = client.get<ifaces::server_side>();

а терь давайте представим такую реализацию сети :
Код


                       .--> talk_service
 client  <-> server  <-|--> game_service
                       `--> rate_service

описывается ли подобное Вашим решением ?



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


pattern`щик
****


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

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



Цитата(mes @  14.11.2010,  18:50 Найти цитируемый пост)
описывается ли подобное Вашим решением ?

да.

Код

ifaces::talk_service::shared_ptr p1 = client.get<ifaces::talk_service>();
p1->method(...);
ifaces::game_service::shared_ptr p2 = client.get<ifaces::game_service>();
p2->method(...);
ifaces::rate_service::shared_ptr p3 = client.get<ifaces::rate_service>();
p3->method(...);



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


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


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

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



почти случайно попалась ссылка :
http://www.rpi.edu/~wuz5/Doc/PosterofHCI20...?attredirects=0
сейчас времени изучать нет, но вроде по теме.. 

если что, из заголовка можно будет выдарать название 
smile



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


pattern`щик
****


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

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




"distributed remote interaction system"
классно звучит)

сокращенно: distremint smile

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


pattern`щик
****


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

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



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

предложили еще такой: Distributed Systems Communication Library
PM WWW   Вверх
mes
Дата 14.11.2010, 21:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(boostcoder @  14.11.2010,  19:33 Найти цитируемый пост)
сокращенно: distremint

сокращать можно по первым буквам 

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

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

Цитата(boostcoder @  14.11.2010,  19:50 Найти цитируемый пост)
 Distributed Systems Communication Library 

сокращенно : disco smile  
до индии только танцора не хватает smile

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


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


pattern`щик
****


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

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



mes, гляньте еще эту тему: http://forum.vingrad.ru/forum/topic-315011...y2247293/0.html
во флейме создал.

Добавлено через 13 минут и 3 секунды
значит имя ему: discoly(DIstributed Systems COmmunication LibrarY).

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


pattern`щик
****


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

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



Цитата(boostcoder @  14.11.2010,  18:15 Найти цитируемый пост)
но пока получаю access violation

исправил.

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


pattern`щик
****


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

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



день добрый.
пре-альфа: http://code.google.com/p/discoly/

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


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


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

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



Цитата(boostcoder @  22.11.2010,  14:32 Найти цитируемый пост)
пре-альфа: http://code.google.com/p/discoly/

Цитата

This project currently has no downloads.

 smile  smile 


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


pattern`щик
****


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

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



mes, так чего там загружать? SVN ведь есть: http://code.google.com/p/discoly/source/checkout
чтоб было чего загружать, нужно код в архив пихать, руками. потом руками его заливать туда. не оперативно это.

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


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


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

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



Цитата(boostcoder @  22.11.2010,  15:20 Найти цитируемый пост)
 SVN ведь есть: http://code.google.com/p/discoly/source/checkout

ааа smile

Добавлено через 3 минуты и 19 секунд
кстати насчет client_side server_side.. все равно это вызывает чувство отторжения.. 
правда не могу объяснить почему..  хотя..
принципиально сервер_сайд ничем не отличается от клиент_сайд в той области, что касается распределенного общения..

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



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


pattern`щик
****


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

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



Цитата(mes @  22.11.2010,  17:14 Найти цитируемый пост)

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

к тому же например client_side может быть различной..

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

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


pattern`щик
****


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

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



кстати. реализовал синхронные вызовы smile 
но они не всегда синхронные.
пример: http://code.google.com/p/discoly/source/br...client/main.cpp
Код

         c->get_int(); // асинхронный
         int v1 = c->get_int().as<int>(as_callback); // синхронный
         boost::uint64_t v2 = c->get_int(); // синхронный
         boost::uint32_t v3 = c->get_int(); // синхронный

т.е. интерфейсы к методам возвращающим не void, возвращают variant у которого в методе as<>() происходит блокировка condition_variable. если, однако, результат не требуется - вызывается деструктор variant`а и он же разблокирует condition_variable.
PM 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.0959 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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