64,648
社区成员
发帖
与我相关
我的任务
分享
#include <stdafx.h>
#include "Packet.h"
#include <map>
/*
**2011年4月13日
*/
/*
**封包操作
** in:数据包的长度(packLen), 客户端请求的操作(opera), 流水号(id)
**out:数据包的数据(data)
*/
void PackData( string& data, int opera, int id, int packLen)
{
packLen += data.size();
char *temp = new char[12];
_snprintf(temp, 12,"%04d%04d%04d", packLen, opera, id );
temp[12]='\0';
string strHead(temp);
data = strHead.append(data);
}
/*
**解包操作
** in:收到的数据包指针(recvPack), 解包后的数据结构引用(refPacket)
**out:解包后的数据结构引用(refPacket)
*/
void UnPackData( const char *recvPack, PACKET& refPacket )
{
string tempRecvPack(recvPack);
refPacket.m_PacketLength = tempRecvPack.size();
refPacket.m_Data = tempRecvPack.substr(12, refPacket.m_PacketLength - 12);
refPacket.m_Opera = atoi(tempRecvPack.substr(4, 4).c_str());
refPacket.m_Id = atoi(tempRecvPack.substr(8, 4).c_str());
}
/*
**封装JSON
** in:封装前的JSON空串(refJSON), 不定形参的个数(argc)
**out:封装后的JSON串(refJSON)
**PS:不定形参只能为char*类型
*/
void PackJSON( string &refJSON, const int argc,...)
{
string JSON("");
va_list argStart;
va_start(argStart, argc);
for( int j = 0; j < argc; ++j )
{
if( (0 == j % 2) && (0 != j) )
{
JSON.append(";");
}
else if(0 != j % 2)
{
JSON.append(":");
}
else{}
JSON.append( string(va_arg(argStart, char*)));
}
va_end(argStart);
refJSON = JSON;
}
/*
**解封JSON
** in:封装好的JSON串(refJSON)
**out:解封后的数据集合(refUnJSON)
*/
void UnPackJSON( map<string, string>& refUnJSON,const string &refJSON)
{
const char *ptrJSON = refJSON.c_str();
int begin = 0, end = 0;
string key(""), value("");
for(int i = 0; i <= refJSON.size(); ++i )
{
if(*(ptrJSON + i) == ':')
{
end = i;
key = refJSON.substr(begin, end - begin);
begin = end + 1;
}
if( *(ptrJSON + i) == ';' || *(ptrJSON + i) == '\0')
{
end = i;
value = refJSON.substr(begin, end - begin);
begin = end + 1;
refUnJSON[key] = value;
}
}
}