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

Поиск:

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


pattern`щик
****


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

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



про буст сигналы я задумывался. с ними очень удобно.
я вот подумал, что асинхронной диспетчеризации у нас сейчас нет. т.е. при получении пакета, мы его диспетчеризуем, и после опять ждем пакета. но, если метод обработчик у нас "долгий", то мы не сможем обрабатывать другие входящие пока этот не вернет управление.
решается это просто: после получения пакета запускаем асинхронный таймер с выдержкой равной нулю а в хендлер передаем функциональный объект созданный биндом smile 
PM WWW   Вверх
mes
Дата 3.11.2010, 00:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



ага.. о чем то в этом роде я тоже думал.. но пока этого не надо.. 



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


pattern`щик
****


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

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



mes, пересматриваю Ваши коды, и голова кругом...
сейчас напишу огромный пост..

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


Добавлено @ 23:03
давайте ввод/вывод пока не обсуждать. как будто его и вовсе нет smile 
когда заработает каркас целиком - тогда многие моменты станут очевиднее. вот тогда можно оптимизировать код.

и так.
есть класс net_client с двумя публичными методами.
Код

struct net_client {
   void on_inkom(const rpc_packet& packet) {}
   template<typename T>
   void send(const T& o) {}
};


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

далее.. пишу...

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


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


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

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



Цитата(boostcoder @  3.11.2010,  21:56 Найти цитируемый пост)
пересматриваю Ваши коды, и голова кругом...

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

Цитата(boostcoder @  3.11.2010,  21:56 Найти цитируемый пост)
давайте ввод/вывод пока не обсуждать. как будто его и вовсе нет

имеется ввиду сетевая часть, давайте.. я с этого и начинал smile

Добавлено через 4 минуты и 2 секунды
Цитата(boostcoder @  3.11.2010,  21:56 Найти цитируемый пост)
 есть класс user_context

Цитата(boostcoder @  3.11.2010,  21:56 Найти цитируемый пост)
 класс net_client

тогда уж просто клиент (без нет_), чтоб в лишних детали не путаться smile

Добавлено через 4 минуты и 43 секунды
Цитата(boostcoder @  3.11.2010,  21:56 Найти цитируемый пост)
далее.. пишу...

ждем-с smile


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


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


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

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



а понял вас интересует взаимодействие клиента и юзер_контекста ... так ?



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


pattern`щик
****


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

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



mes, скажите, это http://liveworkspace.org/code/93bbe9011487...5ee4e2130e216d3 Ваш последний код?
т.е. мне опираться на него?

Цитата(mes @  3.11.2010,  23:21 Найти цитируемый пост)
вас интересует взаимодействие клиента и юзер_контекста ... так ?

не совсем.
меня интересует что и как нужно сгенерировать. т.е. начиная с самого начала создания новой команды.
PM WWW   Вверх
mes
Дата 3.11.2010, 23:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(boostcoder @  3.11.2010,  22:32 Найти цитируемый пост)
не совсем.
меня интересует что и как нужно сгенерировать. т.е. начиная с самого начала создания новой команды. 

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

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

Добавлено через 3 минуты и 20 секунд
Цитата(boostcoder @  3.11.2010,  22:32 Найти цитируемый пост)
Ваш последний код?

последний я приводил как прообраз клиента.. 
на какой ориентироваться зависит оттого, какой этап Вы сейчас решаете.. 





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


pattern`щик
****


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

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



Цитата(mes @  3.11.2010,  23:53 Найти цитируемый пост)
на какой ориентироваться зависит оттого, какой этап Вы сейчас решаете.. 

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


pattern`щик
****


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

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



вопрос:
в классах one_ctrl, two_ctrl, main_ctrl есть конструктор принимающий ссылку на тип junction. собственно не понял зачем это?
поясните пожалуйста smile

Добавлено через 1 минуту и 25 секунд
согласно этому коду: http://liveworkspace.org/code/42e7f0049659...d81b881b3baf4e2
ради эксперимента, из класса one_ctrl я это все убрал. результат тот же. может быть есть какой-то смысл, мне не очевидный?
PM WWW   Вверх
mes
Дата 4.11.2010, 00:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата

 smile 

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

Добавлено через 54 секунды
Цитата(boostcoder @  3.11.2010,  23:35 Найти цитируемый пост)
 может быть есть какой-то смысл, мне не очевидный? 

понял..сейчас..

Добавлено через 6 минут и 35 секунд
ну вот смотрите.. у вас весь функционал делится на подразделения.. 
одно отвечает за авторизацию, другое за пинг, третье за комнаты, четвертое ... и т.д
каждое подразделение является стыком-контролером между юзером и сервисом..
т.е. оно принимает команды от обоих и обрабатывает нужным образом.. 
также оно должно отдавать информацию обоим.. так юзеру она может просто предоставлять методы для чтения состояния,
а вот в сеть оно должна отправлять команды.. так как подразделений много, а сокет у нас один, каждое подразделение держит у нас ссылку на точку входа.. от точки входа нам доступны как сокет, так и соседнии контролеры, для обмена информацией.. 



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


pattern`щик
****


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

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



гляньте плиз: http://liveworkspace.org/code/fc0b10348bcd...394a1a052b6befc
обратите внимание на two_ctrl. я добавил метод call_main(). я правильно понял предназначение этой ссылки?
PM WWW   Вверх
mes
Дата 4.11.2010, 00:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



вот схематично.. насколько смог :
Код

user                             server 
-----------------------------------------------
  client   <=> ------ <=>   user_context
   |  `---<-------.           |   `-----<-----.
   |-> c_ctrl1 ->-|           |-> uc_ctrl1 ->-|
   `-> c_ctrl2 ->-'           `-> uc_ctrl2 ->-'


Добавлено через 2 минуты и 22 секунды
client  (ну и соответсвенно user_context) являются тригерами, которые переключают куда направить поток, или наружу или внутрь по кругу..
P.S. под потоком команд подразумеваются любые команды, как наши , так и обычный вызов функции

Добавлено через 4 минуты и 46 секунд
Цитата(boostcoder @  3.11.2010,  23:52 Найти цитируемый пост)
я добавил метод call_main(). я правильно понял предназначение этой ссылки? 

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

Добавлено через 5 минут и 33 секунды
но эта задача уже более верхнего уровня.. и к этой теме уже отношения не имеет.. для нее лучше создать новую.. чтоб не путаться в этом хаосе smile

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


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


pattern`щик
****


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

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



mes, это ответ на это?:
Цитата

гляньте плиз: http://liveworkspace.org/code/fc0b10348bcd...394a1a052b6befc
обратите внимание на two_ctrl. я добавил метод call_main(). я правильно понял предназначение этой ссылки? 


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

удобнее мне кажется будет в junction добавить метод типа "get<controller>()". т.к. я понял, реализация junction от юзера скрыта. так?

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

ок.
закрыли этот вопрос.

Цитата(mes @  4.11.2010,  00:54 Найти цитируемый пост)
и насчет дистрибьютера.. его конструкция громоздкая и не очень удачная.. последняя концепция с сигналами мне кажется более удобной..

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


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


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

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



Цитата(boostcoder @  4.11.2010,  00:02 Найти цитируемый пост)
т.е. вместо add_handler() и всех его внутренностей, создать карту сигналов? 

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

Добавлено @ 01:19
Цитата(boostcoder @  4.11.2010,  00:02 Найти цитируемый пост)
т.е. вместо add_handler() и всех его внутренностей, создать карту сигналов? 

адд_хэндлер замениться на гет_сигнал..

Добавлено @ 01:20
или на просто on<>

Добавлено @ 01:24
Цитата(boostcoder @  4.11.2010,  00:02 Найти цитируемый пост)
удобнее мне кажется будет в junction добавить метод типа "get<controller>()". т.к. я понял, реализация junction от юзера скрыта. так?

по идеи каждый подраздел представлен двумя классами.. например  auth_iface и auth_ctrl.
где ctrl это скрытая реализация, а iface - интерфейс пользователя являющийся прокси (*) для контролера.. 

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

Добавлено через 6 минут и 24 секунды
но это уже было из соседней темы  smile 

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


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


pattern`щик
****


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

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



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

Цитата(mes @  4.11.2010,  01:19 Найти цитируемый пост)
по идеи каждый подраздел представлен двумя классами.. например  auth_iface и auth_ctrl.
где ctrl это скрытая реализация, а iface - интерфейс пользователя являющийся прокси (*) для контролера.. 

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

не очень понял о чем конкретно идет речь..

Это сообщение отредактировал(а) boostcoder - 4.11.2010, 01:39
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.0916 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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