3,405
社区成员
发帖
与我相关
我的任务
分享
//包头
struct MileageMsgHead
{
int msgBodyLenth;
int msgType;
int msgVersion;
};
//数据
struct MileageMsgBody
{
int airCardId;
int mileageNum;
int price;
};
//消息包
struct NetPacketMileage
{
MileageMsgHead Header; //包头
MileageMsgBody Body; //数据
};
对消息包进行处理的类:
class CNetPacket
{
public:
CNetPacket(int msgType, int msgVersion, int airCardId, int mileageNum, int price);
public:
void CreateMileageMsgBody(int airCardId, int mileageNum, int price);
void CreateMileageMsgHead(int msgType, int msgVersion);
std::string CreateMileageMsgBodyJsonString();
std::string CreateMileageMsgHeadJsonString();
std::string GetMileagePacketString();
private:
NetPacketMileage mileagePacket;
};
具体的实现代码:
CNetPacket::CNetPacket(int msgType, int msgVersion, int airCardId, int mileageNum, int price)
{
CreateMileageMsgBody(airCardId, mileageNum, price);
CreateMileageMsgHead(msgType, msgVersion);
}
void CNetPacket::CreateMileageMsgBody(int airCardId, int mileageNum, int price)
{
memset(&mileagePacket.Body, 0, sizeof(mileagePacket.Body));
mileagePacket.Body.airCardId = airCardId;
mileagePacket.Body.mileageNum = mileageNum;
mileagePacket.Body.price = price;
}
std::string CNetPacket::CreateMileageMsgBodyJsonString()
{
//根节点
Json::Value root;
//根节点属性
root["airCardId"] = Json::Value(mileagePacket.Body.airCardId);
root["mileageNum"] = Json::Value(mileagePacket.Body.mileageNum);
root["price"] = Json::Value(mileagePacket.Body.price);
std::string strMsgBody = root.toStyledString();
return strMsgBody;
}
void CNetPacket::CreateMileageMsgHead(int msgType, int msgVersion)
{
mileagePacket.Header.msgType = msgType;
mileagePacket.Header.msgVersion = msgVersion;
std::string strMsgBody = CreateMileageMsgBodyJsonString();
mileagePacket.Header.msgBodyLenth = strlen(strMsgBody.c_str());
}
std::string CNetPacket::CreateMileageMsgHeadJsonString()
{
//消息长度占8位
char cBodyLength[9];
sprintf_s(cBodyLength, "%8d", mileagePacket.Header.msgBodyLenth);
std::string strBodyLength(cBodyLength);
//消息类型占4为
char cMsgType[5];
sprintf_s(cMsgType, "%04d", mileagePacket.Header.msgType);
std::string strMsgType(cMsgType);
//版本号占4位
char cMsgVersion[5];
sprintf_s(cMsgVersion, "%4d", mileagePacket.Header.msgVersion);
std::string strMsgVersion(cMsgVersion);
std::string strMsgHead = strBodyLength + strMsgType + strMsgVersion;
return strMsgHead;
}
std::string CNetPacket::GetMileagePacketString()
{
std::string strPacket = CreateMileageMsgHeadJsonString() + CreateMileageMsgBodyJsonString();
return strPacket;
}