Чтение varint с использованием каркаса cocoaasyncsocket - PullRequest
1 голос
/ 27 апреля 2011

Кто-нибудь имел опыт использования cocoaasyncsocket вместе с google protobuf? Я хочу разделить кадры, используя varint, что достаточно просто, используя комбинацию клиент / сервер на основе netty, но я не вижу простого способа декодирования исходного varint при чтении с использованием cocoaasync.

1 Ответ

0 голосов
/ 25 мая 2011

Со стороны C ++ вам придется использовать комбинацию ReadVarint32 () и VarintSize32 () сделать что-то вроде этого:

char buf[4];
buf = some_api_call(); /* _Copy/peak_ up to 4 bytes off the wire */
CodedInputStream cos(buf, sizeof(buf) - 1);

uint32_t frame_sz;
if (!cos.ReadInputStream(&frame_sz)) {
  // Unable to read the frame size
  return false;
}

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

uint32_t consumed_bytes = CodedOutputStream::VarintSize32(frame_sz);

Теперь вы знаете, сколько байтов было использовано для генерации frame_sz.

Я быоберните эти вызовы в библиотеку, в которую я вставил "C" и соединил бы из вашего приложения.

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