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

Поиск:

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


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


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

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



Код

enum { header_size = 10 };
typedef boost::array<char, header_size> packet_header;
static const char* format = "%04d%06d";

size_t get_body_length(const packet_header& header) {
   size_t id, len = 0;
   sscanf(header.data(), format, &id, &len);
   return len;
}

std::string to_raw_data(const rpc_packet& packet) {
   boost::array<char, header_size> header;
   sprintf(header.data(), format, packet.id, packet.data.length());
   std::ostringstream os;
   os << header.data() << packet.data;
   return os.str();
}

rpc_packet from_raw_data(const std::string& raw) {
   size_t id, len;
   sscanf(raw.data(), format, &id, &len);
   rpc_packet packet;
   packet.id = id;
   packet.data.assign(raw.begin()+header_size, raw.end());
   return packet;
}


чтоб идти дальше нужно это отрихтовать.. и предположительно объединить в одном классе.. 
после можно все лишнее (т.е. все что написали кроме самого клиента) упаковать в хидер
smile


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


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


pattern`щик
****


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

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



Цитата(mes @  31.10.2010,  19:50 Найти цитируемый пост)
чтоб идти дальше нужно это отрихтовать.. и предположительно объединить в одном классе.. 

ну да. сейчас сделаю.
PM WWW   Вверх
mes
Дата 1.11.2010, 11:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



перечитал.. оказывается я и не заметил :
Цитата(boostcoder @  31.10.2010,  17:45 Найти цитируемый пост)
 можно в него добавить еще один метод такой же сигнатуры как и net_client::on_inkom и уже в нем дергать net_client::on_inkom и следом запускать следующее чтение. 

и предложил тоже самое: 
Цитата(mes @  31.10.2010,  18:10 Найти цитируемый пост)
можно ведь в incom передавать ссылку net_io::on_incom, в котором уже делать нужные заботы и вызывать client::on_incom..

 smile 



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


pattern`щик
****


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

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



вот вам смешно, а я до сих пор сомневался в том что правильно вас понял. искал какой-то тайный смысл smile 
PM WWW   Вверх
mes
Дата 1.11.2010, 12:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(boostcoder @  1.11.2010,  10:58 Найти цитируемый пост)
том что правильно вас понял. искал какой-то тайный смысл  

Как на шахматном турнире в Васюках (12 стульев)  smile

Добавлено через 2 минуты
Цитата
С необычайной легкостью и безусловно ехидничая в душе над отсталыми любителями города Васюки, гроссмейстер жертвовал пешки, тяжелые и легкие фигуры направо и налево. Обхаянному на лекции брюнету он пожертвовал даже ферзя. Брюнет пришел в ужас и хотел было немедленно сдаться, но только страшным усилием воли заставил себя продолжать игру.

 smile 


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


pattern`щик
****


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

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



smile

Добавлено через 47 секунд
скоро выложу код класса взамен rpc_packet и сторонних функций.
PM WWW   Вверх
mes
Дата 1.11.2010, 12:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(boostcoder @  1.11.2010,  11:18 Найти цитируемый пост)
скоро выложу код класса взамен rpc_packet 

взамен ? ну пусть будет взамен .. жду smile




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


pattern`щик
****


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

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



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


pattern`щик
****


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

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



mes, у вас есть последняя версия дистрибьютора? или все тут в теме?
теперь мне нужно его привязать. сейчас еще раз пересмотрю..освежу память..
PM WWW   Вверх
mes
Дата 1.11.2010, 14:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата

typedef boost::function<void(const rpc_packet&)> on_inkom_t;

это желательно объявить внутри incom для net_io и внутри net_io для клиента..
учитывая что факт совпадения является "случайностью"

Добавлено через 3 минуты и 10 секунд
второе замечание класс rpc_paket перегружен.. и монолитен.. 
раз уж решили объединить, то тогда сделайте раздельный удобный доступ к оглавлению, телу и ид..
to_raw_data в данном контекте смотрится очень брутально.. 
smile

Добавлено через 3 минуты и 52 секунды
остальные замечания попозже..

Добавлено через 4 минуты и 46 секунд
Цитата(boostcoder @  1.11.2010,  13:11 Найти цитируемый пост)
есть последняя версия дистрибьютора? или все тут в теме?

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




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


pattern`щик
****


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

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



Цитата(mes @  1.11.2010,  14:12 Найти цитируемый пост)
это желательно объявить внутри incom для net_io и внутри net_io для клиента..
учитывая что факт совпадения является "случайностью"

т.е. просто дважды затайпдефить?

Цитата(mes @  1.11.2010,  14:12 Найти цитируемый пост)
второе замечание класс rpc_paket перегружен.. и монолитен.. 
раз уж решили объединить, то тогда сделайте раздельный удобный доступ к оглавлению, телу и ид..
to_raw_data в данном контекте смотрится очень брутально.. 

можно подробнее, пожалуйста smile 
что не так, и что сделать чтоб было так?
PM WWW   Вверх
mes
Дата 1.11.2010, 14:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(boostcoder @  1.11.2010,  13:34 Найти цитируемый пост)
т.е. просто дважды затайпдефить?

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

Добавлено через 2 минуты
Цитата(boostcoder @  1.11.2010,  13:34 Найти цитируемый пост)
что не так, и что сделать чтоб было так? 

манипулировать не одним блоком, а двумя хидером и боди..

все сейчас пока больше времени нет..позже.. 






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


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


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

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



вот так думаю получше будет :
Код

class rpc_packet 
{
   public:
     std::string get_header ( .. format ) const { .. }
     std::string get_body   ()            const { .. }
     size_t      get_id     ()            const { .. }
   
     rpc_packet (size_t id, .. body)  { .. }
   //  rpc_packet (..header_format, raw_data)  { .. }// может и так, хотя сомневаюсь.. 
...
};



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


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


pattern`щик
****


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

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



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


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


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

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



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



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


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

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