-
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; }
반응형'프로그래밍 > 의문' 카테고리의 다른 글
c# wpf, Data Error: 40 : BindingExpression path error: ??? property not found on 'object' (0) 2019.10.09 c#, Excel Application Quit 후에도 Excel App이 종료되지 않는 현상 (0) 2019.09.24 c# Regex의 패턴은 캐싱 된다. (0) 2019.05.10 할당한 메모리가 working set에 잡히지 않던 현상 (0) 2019.04.23 boost asio 사용 시 win32 버전을 지정하지 않으면 io_context::run이 빠져나가는 현상 (0) 2019.04.14