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

Поиск:

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


pattern`щик
****


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

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



Цитата(mes @  24.11.2010,  20:38 Найти цитируемый пост)
адаптировать под что ? 

под это:
Цитата(boostcoder @  24.11.2010,  18:28 Найти цитируемый пост)
сейчас, типы proxy должны знать о том, что проксируют. но я предполагаю их генерировать, а не писать руками. по этому, возникает проблема: http://liveworkspace.org/code/063ad5f98dc7...8aa0ce7e3b59e8a


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


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


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

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



Цитата(boostcoder @  24.11.2010,  19:40 Найти цитируемый пост)
под это:

под это трудновато..так как
Цитата(mes @  24.11.2010,  17:07 Найти цитируемый пост)
у нас есть зависимость connection от
Цитата(mes @  24.11.2010,  17:07 Найти цитируемый пост)
namespace meta {
template<class T>
struct msg_id;
template <typename T>
struct proxy;
}// namespace meta


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

Добавлено через 2 минуты и 20 секунд
Цитата(boostcoder @  24.11.2010,  19:40 Найти цитируемый пост)
под это:

вот лобовое решение : http://liveworkspace.org/code/5e51104822f8...cdf26a628199c67

Добавлено через 3 минуты и 35 секунд
заменил специализацию на шаблон.. 
но теперь там лишний список типов.. 



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


pattern`щик
****


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

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



Цитата(mes @  24.11.2010,  20:45 Найти цитируемый пост)
вот лобовое решение : http://liveworkspace.org/code/5e51104822f8...cdf26a628199c67

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


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


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

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



Цитата(boostcoder @  24.11.2010,  19:58 Найти цитируемый пост)
ну нет. теперь все типы обязаны иметь эти методы 

нет.. только те что используют..


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


pattern`щик
****


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

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



Цитата(mes @  24.11.2010,  20:45 Найти цитируемый пост)
для начала нужно устранить эти зависимости.. как было показано на предыдущей странице..

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


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


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

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



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

Добавлено @ 21:10
вот в примере у шаблона методов 5, а агент реализует только 3 
http://liveworkspace.org/code/c8dab9888186...5204efe91233782
smile

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


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


pattern`щик
****


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

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



Цитата(mes @  24.11.2010,  21:05 Найти цитируемый пост)
вот в примере у шаблона методов 5, а агент реализует только 3 

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


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


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

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



а вот пример как настраивать условно-генереруемое прокси, для случаев, когда нам нужно определеное поведение:
http://liveworkspace.org/code/abb0d4ec3c50...48f7b85f8b43eba

меняет имена обработчиков ident_ok и ident_no... 

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


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


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


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


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

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



еще несколько замечаний :
1. сообщения должны иметь не только id вызова, но и id группы.. а также прообраз должен быть определен в пространстве discoly..
2. reg по отношению к connection должна быть внешней.. для connection достаточно  bind
3. bind должен принимать тип сообщения, объект приемник (вместо него может быть прокси), и ценность сообщения(для корекктировки очередности вызова )



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


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


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

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



Цитата(mes @  25.11.2010,  08:53 Найти цитируемый пост)
сообщения должны иметь не только id вызова, но и id группы.. а также прообраз должен быть определен в пространстве discoly..

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


namespace discoly {

template <size_t N, typename Traits>
struct msg {
   enum { discoly_invoke_id = Traits::start_id + N,
          discoly_group_id  = Traits::group_id };
          
// assert ( discoly_invoke_id <= Traits::last_id)
};

} // namespace discoly

namespace traits
{
    struct cts {
       enum { start_id = 0,
              last_id  = 10,
              group_id = 0 };
    };
    struct stc {
       enum { start_id = 10,
              last_id  = 20,
              group_id = 1 };
    };        
}// namespace traits

namespace net {
namespace cts {
   template <size_t N>
   struct msg : discoly::msg<N, traits::cts>
   {};
   
   struct user : msg<1>
   {
   };
} // namespace cts

namespace stc {

} // namespace stc
} // namespace net


свойства можно тоже затемплатить..
Код

namespace discoly {

template <size_t S, size_t L, size_t G>
struct msg_traits
{
       enum { start_id = S,
              last_id  = L,
              group_id = G };
};

} // namespace discoly

namespace traits
{
    typedef discoly::msg_traits< 0, 19, 0> cts;
    typedef discoly::msg_traits<20, 39, 1> stc;
             
}// namespace traits


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


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


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


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

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



напрашивается такое :
Код

namespace traits
{
  DISCOLY_DECLARE_MSG_TRAITS
  ( (cts,   0,  19,  0 )
  , (stc,  20,  39,  0 ) 
  );
             
}// namespace traits

namespace net {
namespace cts {

   DISCOLY_DECLARE_BASE_MSG
   (msg, traits::cts);
   
   struct user : msg<0>
   {
   };
   struct quit : msg<1>
   {
   };   
} // namespace cts

namespace stc {

   DISCOLY_DECLARE_BASE_MSG
   (msg, traits::stc);
   
   struct ident_ok : msg<0>
   {
   };
   struct ident_no : msg<1>
   {
   };    
} // namespace stc
} // namespace net


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


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


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


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

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



вот подправил часть замечаний :

http://liveworkspace.org/code/852f8f5a1472...fb50f68f191d241

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


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


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


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

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



ну и соединение должно иметь такой вид :
Код


struct connection 
{

 protected:
  virtual void send (size_t id, void const* body) // packet const& pack
  {
     invoke (id, body); 
  }
  void invoke (size_t id, void const * body) // packet const& pack
  {
     if (auto * invoker = vtable[id])
       invoker->call(body);
  } 

 public:
  template <typename M>
  connection& operator << (M const& m) 
  { 
     send (M::discoly_invoke_id, &m);
     return *this; 
  }
...

http://liveworkspace.org/code/36a6f3efff28...ebf5003a7da1ec4

теперь можем получить  tcp_connection
Код


struct tcp_connection : connection
{
   tcp_io io;

  tcp_connection ()
  {
       io.on_invoke = bind(&tcp_connection::invoke, ..):
  }
 
 virtual void send (packet const& pack)
  {
     io.send (pack); 
  }
  void connect ();
  void disconnect ();
  ...


Добавлено @ 16:14
следующим шагом для соединения нужно иметь возможность задавать интерфейс общения..
т..е ограничивать прием (ну и аналогично биндинг) сообщений по задаваемому списку типов..


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


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


pattern`щик
****


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

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



mes, я за вами не успеваю. сейчас опять случится переизбыток информации smile 
PM WWW   Вверх
mes
Дата 25.11.2010, 16:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(boostcoder @  25.11.2010,  15:36 Найти цитируемый пост)
 я за вами не успеваю. сейчас опять случится переизбыток информации

хорошо... делаю паузу...  давайте разберем, что у нас есть..
если есть вопросы, слушаю smile





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


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

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