разные пакеты, объединение - это правильное использование \ проверка? - PullRequest
0 голосов
/ 20 сентября 2019
Документация

имеет один простой пример «сериализация-десериализация» с одним пакетом.(я не нашел больше примеров)

если у меня много структур пакета, мне нужно использовать union для этого?или это плохая идея?

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

метод Verify - все, что мне нужно для проверки пакета?(структура верна, поля допустимы)

include "body1.fbs";
include "body2.fbs";

union PacketBody {
   body1,
   body2
}

table Packet {
   body: PacketBody
}

root_type Packet;
auto request = Packet::GetPacket(&buf);
auto ver = new flatbuffers::Verifier(buf, len);
if(request->Verify(*ver) {
   //good ?
   auto body = request->body();
   auto body_type = request->body_type();
   map[body_type](body);
} else {
   //wrong packet
}

1 Ответ

0 голосов
/ 21 сентября 2019

Попробуйте заменить map[body_type](body) (не уверен, что именно он должен делать?) На что-то вроде if (body_type == PacketBody_body1) { ... reinterpret_cast<const body1 *>(body) ... }

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

...