我一直在为客户端服务器应用程序使用boost :: asio,我正在以消息的形式来回发送打包的结构,服务器需要确定传递给它的请求结构的类型,并相应地确定对其的响应。现在,每个结构都有一个唯一的TemplateId
,它存储在第二级结构中:MessageHeader
,有一种方法可以从接收到的字节数组(char *)中知道结构的类型。
示例结构:
typedef struct { MessageHeaderInComp MessageHeaderIn; RequestHeaderComp RequestHeader; uint32_t Username; char Pad4[LEN_PAD4]; } __attribute__((packed)) UserLogoutRequest; typedef struct { uint32_t BodyLen; uint16_t TemplateID; //this is unique char NetworkMsgID[LEN_NETWORKMSGID]; char Pad2[LEN_PAD2]; } __attribute__((packed)) MessageHeaderInComp;
现在我正在使用:
const UserLogoutRequest*obj = reinterpret_cast<const UserLogoutRequest*>(buf); //buff is a character array int tempId = obj->MessageHeaderIn.TemplateID;
但是这是针对特定类型(UserLogoutRequest)的硬编码,我想替换它,我该怎么办?欢迎任何想法或建议。
我一直在为客户端服务器应用程序使用boost :: asio,我正在以消息的形式来回发送打包的结构,服务器需要确定传递给它的请求结构的类型,然后...
all