如何从平面缓冲区模式中的任何 table 检索字段
How to retrieve field from any table in a flatbuffer schema
也许这是一个微不足道的问题,但是...
我有一个平面缓冲区模式,它定义了一些消息(表)。
enum EMessages : int
{
E_MSG_EVENT_SYSTEM_INFO = 0x8000,
E_MSG_EVENT_SYSTEM_ERROR = 0x8001,
}
table TMsgHeader
{
sessionRef : int;
transactionId : int;
status : EStatus;
source_id : string;
}
table MSG_EVENT_SYSTEM_INFO
{
opcode : EMessages = E_MSG_EVENT_SYSTEM_INFO;
header : TMsgHeader;
protocol_ver : int = 100;
}
table MSG_EVENT_SYSTEM_ERROR
{
opcode : EMessages = E_MSG_EVENT_SYSTEM_ERROR;
header : TMsgHeader;
error_no : int;
error_desc : string;
}
在接收端,我需要一种方法来检索 OpCode 字段以了解是哪条消息(反序列化)。
原因,因为每条消息都有不同的大小,OpCode 字段永远不会在发送的二进制缓冲区中的相同位置。
是否有一些"best practice"应用于FlatBuffer?
我想避免将 FB 负载封装到附加 OpCode 的另一条消息中。
您最好使用内置的联合功能,例如:
union Message { Info, Error }
table Info { protocol_ver:int }
table Error { error_no:int; error_string:string }
table Header { msg:Message; /* all other header fields go here */ }
root_type Header
请参阅有关如何序列化和读取联合的文档。以前 opcode
现在是 msg_type
。
也许这是一个微不足道的问题,但是...
我有一个平面缓冲区模式,它定义了一些消息(表)。
enum EMessages : int
{
E_MSG_EVENT_SYSTEM_INFO = 0x8000,
E_MSG_EVENT_SYSTEM_ERROR = 0x8001,
}
table TMsgHeader
{
sessionRef : int;
transactionId : int;
status : EStatus;
source_id : string;
}
table MSG_EVENT_SYSTEM_INFO
{
opcode : EMessages = E_MSG_EVENT_SYSTEM_INFO;
header : TMsgHeader;
protocol_ver : int = 100;
}
table MSG_EVENT_SYSTEM_ERROR
{
opcode : EMessages = E_MSG_EVENT_SYSTEM_ERROR;
header : TMsgHeader;
error_no : int;
error_desc : string;
}
在接收端,我需要一种方法来检索 OpCode 字段以了解是哪条消息(反序列化)。
原因,因为每条消息都有不同的大小,OpCode 字段永远不会在发送的二进制缓冲区中的相同位置。
是否有一些"best practice"应用于FlatBuffer?
我想避免将 FB 负载封装到附加 OpCode 的另一条消息中。
您最好使用内置的联合功能,例如:
union Message { Info, Error }
table Info { protocol_ver:int }
table Error { error_no:int; error_string:string }
table Header { msg:Message; /* all other header fields go here */ }
root_type Header
请参阅有关如何序列化和读取联合的文档。以前 opcode
现在是 msg_type
。