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

Поиск:

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


pattern`щик
****


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

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



я создавал карту типов так:
Код

#include <boost/fusion/container/map.hpp>
#include <boost/fusion/include/map.hpp>
#include <boost/fusion/container/map/map_fwd.hpp>
#include <boost/fusion/include/map_fwd.hpp>
#include <boost/mpl/int.hpp>
#include <boost/fusion/support/pair.hpp>
#include <boost/fusion/include/pair.hpp>
#include <boost/fusion/algorithm/iteration/for_each.hpp>
#include <boost/fusion/include/for_each.hpp>
#include <iostream>

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

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

struct type3 {
   enum { id = 2 };
};

namespace bf = boost::fusion;
namespace bm = boost::mpl;

struct printer {
   template<typename T>
   void operator()(const T& o) const {
      std::cout << o.second.id << std::endl;
   }
};

int main() {
   typedef bf::map<
      bf::pair<bm::int_<0>, type1>,
      bf::pair<bm::int_<1>, type2>,
      bf::pair<bm::int_<2>, type3>
   > types;
   types t;
   bf::for_each(t, printer());
}


http://liveworkspace.org/code/26d4922d44f6...c66cd6f41aa7257

Добавлено через 1 минуту и 3 секунды
Цитата(mes @  29.10.2010,  14:14 Найти цитируемый пост)
в любом случае их цель хранить данные..  а мне не нужны сейчас данные.. мне нужны пустые типы

ну да.. тогда mpl smile

Добавлено через 1 минуту и 41 секунду
значит код приведенный выше не актуален.
PM WWW   Вверх
boostcoder
Дата 29.10.2010, 16:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


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

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



в связи с тем, что мне сейчас нужно реализовать передачу/прием пакетов по сети, и как следствие, паковать и распаковывать их, возник следующий вопрос:
пакету нужен заголовок для инфы о нем(id типа, и размер тела). при этом, размер заголовка неизменен. так вот.. для десериализации и диспетчеризации пакета при приеме, нам нужно извлечь из него id и размер тела. при том, размер тела нам так же нужен для чтения тела из сети, т.к. его размер не константен.
собственно сам вопрос: нам нужны два типа: 1) packet_header, 2) packet_data. так?
и еще вопрос: с packet_header - понятно, две целых. а как быть с packet_data? он ведь по сути просто строка. можно затайпдефить. или как?


лучше заранее спрошу..а то опять чего-то не так накожу)


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


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


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

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



Цитата(boostcoder @  29.10.2010,  15:26 Найти цитируемый пост)
packet_header, 2) packet_data. так?

только они не связаны с rpc_packet.. 
пусть он будет net_packet  { header, data };
тут уже можно использовать константные буфферы и делать проверку если rpc_packet не помещается в net_packet
smile

Добавлено через 7 минут и 14 секунд
хотя наверно сама структура net_packet лишняя.. так как дата у нас и так есть...
серверу нужен общий буфер, и обоим хидер, или даже не хидер , а preamble
smile


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


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


pattern`щик
****


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

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



Цитата(mes @  29.10.2010,  16:38 Найти цитируемый пост)
только они не связаны с rpc_packet.. 

а нам не нужно передавать/принимать rpc_packet::id ?

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


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


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

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



Цитата(boostcoder @  29.10.2010,  16:16 Найти цитируемый пост)
опять не понимаю... 

вот так примерно может выглядит функция отправляющая в сокет :
Код

void net_send (socket& sock, rpc_packet const& pack )
{
    char preamble[12];  sprintf (premble, "...", pack.raw_data.size(), pack.id );
    sock.write (preamble, 12);
    sock.write ( pack.raw_data.c_str(), pack.raw_data.size());   
}


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


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


pattern`щик
****


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

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



я, заголовок пакета вижу таким:
Код

[class id] - 2bytes
[method id] - 2bytes
[body size] - 6bytes
[body....]

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

struct rpc_packet {
   std::string raw_data;
};

все.
нам нужны две функции для упаковки типа в массив байт, и для распаковки. шаблонные.
так же, информационные аксесоры, такие как: get_class_id, get_method_id, get_body_size, get_raw_data

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


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


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

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



Цитата(boostcoder @  29.10.2010,  16:29 Найти цитируемый пост)
[class id] - 2bytes
[method id] - 2bytes

какое это имеет отношение к нашим net_ или rpc_ ?!




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


pattern`щик
****


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

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



Цитата(mes @  29.10.2010,  17:29 Найти цитируемый пост)
sock.write ( pack.raw_data.c_str(), pack.raw_data.id);   

т.е.
Код

sock.write(pack.raw_data.c_str(), pack.raw_data.length());
sock.write(&pack.raw_data.id, sizeof(pack.raw_data.id));

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


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


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

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



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

rpc_packet не трогать! разве что заменить raw_data на просто data.. или на просто raw..  чтоб не так длинно было..
 smile

Добавлено @ 17:33
Цитата(boostcoder @  29.10.2010,  16:31 Найти цитируемый пост)
sock.write(&pack.raw_data.id, sizeof(pack.raw_data.id));

нет.. Вы делаете зависимость от конкретной машины... использовать sizeof нельзя.. 



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


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


pattern`щик
****


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

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



Цитата(mes @  29.10.2010,  17:30 Найти цитируемый пост)
какое это имеет отношение к нашим net_ или rpc_ ?!

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

Добавлено через 40 секунд
Цитата(mes @  29.10.2010,  17:31 Найти цитируемый пост)
нет.. Вы делаете зависимость от конкретной машины... использовать sizeof нельзя.. 

ок.

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


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


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

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



Цитата(boostcoder @  29.10.2010,  16:34 Найти цитируемый пост)
в таком случае мы избавляемся от двух типов. остается только один.
порядок полей можно изменить, конечно.

второго типа пакета у нас и так нет, есть только преамбула.. а она отношение имеет только к сетевой передаче..
скрестив их, мало того что увеличиваете связанность, так еще своим предположением в рпц о преамбуле Вы связываете руки  net-"разработчику"
smile


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


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


pattern`щик
****


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

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



ок.

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


pattern`щик
****


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

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



Цитата(mes @  29.10.2010,  17:29 Найти цитируемый пост)
pack.raw_data.id

это что?
PM WWW   Вверх
mes
Дата 29.10.2010, 19:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



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



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


pattern`щик
****


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

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



с pack.raw_data все понятно. но вот кто такой id в pack.raw_data ?
PM WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1025 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


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

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