【发布时间】:2020-10-20 09:11:32
【问题描述】:
这是我如何使用 FlatBuffers 创建消息以及如何使用 Boost ASIO 通过 TCP 发送消息。
flatbuffers::FlatBufferBuilder builder;
auto email = builder.CreateString("test@asd.dg");
auto password = builder.CreateString("test");
auto loginRequest = Vibranium::CreateLoginRequest(builder,email,password);
builder.FinishSizePrefixed(loginRequest);
size_t size = builder.GetSize();
uint8_t *buf = builder.GetBufferPointer();
//And here I am sending it with Boost ASIO.
boost::asio::write(s, boost::asio::buffer(buf,size));
我想做的是获取这个枚举的值:
enum ServerOpcode : uint16_t{
SMSG_AUTH_CONNECTION_RESPONSE = 0x001,
SMSG_LOGIN_REQUEST = 0x002,
SMSG_LOGIN_REQUEST_RESPONSE_TEST = 0xA99,
};
我们可以这样说:
ServerOpcode opc;
opc = ServerOpcode::SMSG_LOGIN_REQUEST;
并在buf*前面加上opc。
由于uint16_t 的大小比接收端的固定大小,我知道ServerOpcdode 始终保留在前两个字节中。
那么我如何在buf 前面加上opc infron 是否有可能以及如何?
附:
注意,FlatBuffers 的file_indetifier 不是这里的解决方案。
【问题讨论】:
标签: c++