프로그래밍/의문
FlatBuffer streaming 통신
제페
2019. 8. 11. 04:28
반응형
원했던 동작
별도의 패킷 헤더를 붙이지 않고 FlatBuffer 바이너리만 송신한다.
사전 작업
FLATBUFFERS_TRACK_VERIFIER_BUFFER_SIZE를 정의한다.(#define FLATBUFFERS_TRACK_VERIFIER_BUFFER_SIZE) (Verifier의 GetComputedSize를 사용하기 위해)
방법
1. flatbuffer::Verifier를 이용하면 패킷이 완성되었는지 체크한다.
2. flatbuffer::Verifier::GetComputedSize()를 사용해 메세지 사이즈 만큼 읽기 인덱스를 뒤로 넘긴다.
샘플 코드
FlatBufferBuilder builder;
auto serializedPacket =
CreatePacket(
builder,
PacketBase::LoginReq,
CreateLoginReq(builder, builder.CreateString("test")).Union());
builder.Finish(serializedPacket);
// 여기부터 수신 측이라 가정
std::vector<uint8_t> streambuf{ builder.GetBufferPointer(), builder.GetBufferPointer() + builder.GetSize() };
size_t streambufIdx = 0;
Verifier verifier{ builder.GetBufferPointer(), builder.GetSize() };
if (VerifyPacketBuffer(verifier))
{
const LoginReq* packet = GetPacket(builder.GetBufferPointer())->payload_as_LoginReq();
size_t messageSize = verifier.GetComputedSize();
streambufIdx += messageSize;
}
반응형