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

Поиск:

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


pattern`щик
****


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

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



Цитата(mes @  6.12.2010,  17:41 Найти цитируемый пост)
судя по названию она должна уметь несколько большее

ну да..это я погорячился smile 
PM WWW   Вверх
mes
Дата 7.12.2010, 17:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



поразмышляем дальше..

наметим фронты :
1. отправка типизированного-сообщения и возбуждение сигнала принятым сообщением
2. конвертация типизированого в сырое и обратно.. 
3. транспортировка сырого.. 

на 3м фронту нам требуется размер данных и сами данные, 
 // возможно также еще некие данные для маршрутизации, но нас пока не интересуют

на 2м также некоторый ид (скорей всего msg_id, a не method_id), на основании которого сообщения будет (де)серелизоваться

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

Добавлено @ 17:44
попробуем отразить кодом :
Код

// 3й фронт
struct connection
{
    void send (packet const&);
    std::function<void(packet const&)> on_response; 
};

Код

//1й фронт
struct sender
{
    template <class M>
    void send (M const& msg);
    std::function<void(i_msg const&)>  on_send;

// или   ? :
    void send (cts_msg const& );
};

void dispatcher 
{
     void dispatch (i_msg&  const&);
      template<class M, Fn>
     void set_handler(Fn fn); // void on ..
};

Код

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


Добавлено @ 17:46
значит сендер должен быть объеденен с сериализатором.. 
также как и диспатчер с десерилизатором... 
но все ж получается два типа msg/method и пакет.. 


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


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


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


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

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



пока к следующему вопросу.. 

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

пока прерываюсь времени больше нет.. 


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


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


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

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



а понял в чем дело, я не правильно фронты представлял 
1. create / invoke
2. send / receive
3.  transport

Добавлено через 1 минуту и 17 секунд
итого получается : 
method->msg->packet->msg->method.. 



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


pattern`щик
****


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

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



Цитата(mes @ 7.12.2010,  18:49)
а понял в чем дело, я не правильно фронты представлял 
1. create / invoke
2. send / receive
3.  transport

Добавлено @ 18:51
итого получается : 
method->msg->packet->msg->method..

сейчас пересмотрю код... возможно рефакторинг проведу..
PM WWW   Вверх
mes
Дата 7.12.2010, 18:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(boostcoder @  7.12.2010,  17:53 Найти цитируемый пост)
сейчас пересмотрю код... возможно рефакторинг проведу.. 

сильно не торопитесь пока.. мож еще что стукнет smile я сейчас как раз размышляю насчет стыка между 2й->1й фронт.. 
точнее над тем , что есть invoke в нашей задаче..

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


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


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


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

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



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

Код

struct some_msg : ..
{
     some_msg(int i, int j) : _i(i) , _j(j) {} // create 

     typedef std::function(<void(int, int)>) invoke_visitor_t;
     void invoke (invoke_visitor_t fn)   { fn(_i, _j) ;   }
...     
};

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

Добавлено @ 20:33

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

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

void handle (cts_base_msg const&); // отсеиваем все cts-сообщения
void handle (cttc_base_msg const&); // отсеиваем все cttc-сообщения
void handle (i_msg const&); // все остальные

2б. одно и то же собщение исполнять в нескольких местах и разными методами.. (дополнение к пункту 1)

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

4. для простых случаев предоставлять готовую схему
и многое другое...
smile


Это сообщение отредактировал(а) mes - 7.12.2010, 20:35


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


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


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

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



Цитата

code formating/refactoring

кому то не нравятся фигурные скобки на новой строке  smile 



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


pattern`щик
****


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

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



Цитата(mes @  8.12.2010,  00:36 Найти цитируемый пост)
кому то не нравятся фигурные скобки на новой строке

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

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


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


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

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



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

aa ) я о такой ситуации чего то и не подумал...




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


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


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

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



lws чего-то барахлит smile :
Цитата

In file included from source.cpp:2:0:
STL Decryptor: Can't create NativeLog.txt. Bailing out. at /usr/share/stlfilt/gSTLFilt.pl line 2024, <STDIN> line 2.



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


pattern`щик
****


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

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



хм... сейчас буду разбираться.. smile 

зы
это Вы LWS сломали? smile 
PM WWW   Вверх
mes
Дата 8.12.2010, 16:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(boostcoder @  8.12.2010,  15:21 Найти цитируемый пост)
хм... сейчас буду разбираться.

вроде уже работает smile

Цитата(boostcoder @  8.12.2010,  15:21 Найти цитируемый пост)
это Вы LWS сломали?   

я не специально  smile

Добавлено через 59 секунд
зато я разобрался со вторым фронтом smile

Добавлено через 12 минут и 5 секунд
итак..
для начала немного по терминам :
слово "packet" мне кажется больше всего подходит для типизизованного сообщения.. 
после добавления в него концепции accept(invoker_t) он служит как раз для упаковки и передачи аргументов.. 
для миграционного сообщения пока остановился на слове "rawblock"
nid пока временное обозначение идентификатора..

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

вот условный пример :
http://liveworkspace.org/code/dc60c4f5ca6d...0cd97806e6cf1b2



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


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


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

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



для наглядности :
Код

packetA ->-.          (connection)              ,->- receptor<packetA, Fn>
packetB ->-|->sender ->---´  `--->- perception -|->- receptor<packetB, Fn>
packetC ->-´                                    `->- receptor<packetC, Fn>


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


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


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


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

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



Цитата(mes @  8.12.2010,  15:53 Найти цитируемый пост)
для наглядности :

немного расширил схемку :
Код

              .------------------------[client_side]---------------------------------------.
              packetA ->-.                                        ,->- receptor<packetD, Fn>
              packetB ->-|-> sender ---->---.  .--->- perception -|->- receptor<packetE, Fn>
              packetC ->-´                  |  |                  `->- receptor<packetF, Fn>            
                                            :  :
                                            :  :
receptor<packetA, Fn> -<-.                  |  |                  .-<- packetD
receptor<packetB, Fn> -<-|- perception -<---´  `---<-- sender  -<-|-<- packetE
receptor<packetC, Fn> -<-´                                        `-<- packetF
`--------------------------------------[server_side]-------------------------´ 


Это сообщение отредактировал(а) mes - 8.12.2010, 18:58


--------------------
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.