📄 msgbag.cpp
字号:
// MsgBag.cpp: implementation of the CMsgBag class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "MsgBag.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CMsgBag::CMsgBag()
{
}
/*---------------------------------------------------------------------------
基本数据完全打包
--------------------------------------------------------------------------*/
void CMsgBag::DataPackage(CString& buff, tagPacketParam* param)
{
CString bufTmp = ""; //临时包
char strTmp[5] = ""; //接收整形按字节转换字符串
long bagLen = 0; //包长
long parLen = 0; //参数长度
bufTmp += param->order; //命令加入包
bufTmp += param->Status; //服务器消息返回状态(修)
//////////////////////////////////
//数据接收方
parLen = param->SentTo.GetLength();
ltoc(strTmp, parLen);
bufTmp += strTmp;
bufTmp += param->SentTo;
ltoc(strTmp, param->paramNum); //把参数个数按字节转换字符串
bufTmp += strTmp; //参数个数加入包
//////////////////////////////////
//打包帐号
parLen = param->UserId.GetLength();
if(parLen != 0)
{
ltoc(strTmp, parLen);
bufTmp += strTmp;
bufTmp += param->UserId;
}
//////////////////////////////////
//打包密码
parLen = param->UserPsw.GetLength();
if(parLen != 0)
{
ltoc(strTmp, parLen);
bufTmp += strTmp;
bufTmp += param->UserPsw;
}
//////////////////////////////////
//打包用户名
parLen = param->UserName.GetLength();
if(parLen != 0)
{
ltoc(strTmp, parLen);
bufTmp += strTmp;
bufTmp += param->UserName;
}
//////////////////////////////////
//打包性别
parLen = param->UserSex.GetLength();
if(parLen != 0)
{
ltoc(strTmp, parLen);
bufTmp += strTmp;
bufTmp += param->UserSex;
}
//////////////////////////////////
//打包部门
parLen = param->UserDptm.GetLength();
if(parLen != 0)
{
ltoc(strTmp, parLen);
bufTmp += strTmp;
bufTmp += param->UserDptm;
}
//////////////////////////////////
//打包职务
parLen = param->UserDuty.GetLength();
if(parLen != 0)
{
ltoc(strTmp, parLen);
bufTmp += strTmp;
bufTmp += param->UserDuty;
}
//////////////////////////////////
//打包电话
parLen = param->UserTel.GetLength();
if(parLen != 0)
{
ltoc(strTmp, parLen);
bufTmp += strTmp;
bufTmp += param->UserTel;
}
//////////////////////////////////
//打包Email
parLen = param->UserEmail.GetLength();
if(parLen != 0)
{
ltoc(strTmp, parLen);
bufTmp += strTmp;
bufTmp += param->UserEmail;
}
/////////////////////////////////
//聊天信息
parLen = param->UserChar.GetLength();
if(parLen != 0)
{
ltoc(strTmp, parLen);
bufTmp += strTmp;
bufTmp += param->UserChar;
}
/////////////////////////////////
//生成发送包
bagLen = bufTmp.GetLength();
ltoc(strTmp, bagLen);
buff += strTmp;
buff += bufTmp;
}
/*---------------------------------------------------------------------------
基本数据完全拆包
--------------------------------------------------------------------------*/
void CMsgBag::SplitDate(CString& buff, CString* strArray)
{
CString Tmp = "";
long lTmp = 0;
long GetDataPos = 0;
CString a;
///////////////////////////////
//提取包长
Tmp = buff.Mid(GetDataPos, INPACKET_FLAG_BYTE);
GetDataPos += INPACKET_FLAG_BYTE;
lTmp = ctol(Tmp.GetBuffer(0));
///////////////////////////////
//提取命令号
Tmp = buff.Mid(GetDataPos, INPACKET_FLAG_BYTE);
GetDataPos += INPACKET_FLAG_BYTE;
///////////////////////////////
//提取返回状态
Tmp = buff.Mid(GetDataPos, INPACKET_FLAG_BYTE);
GetDataPos += INPACKET_FLAG_BYTE;
///////////////////////////////
//提取发送方长度
Tmp = buff.Mid(GetDataPos, INPACKET_FLAG_BYTE);
GetDataPos += INPACKET_FLAG_BYTE;
lTmp = ctol(Tmp.GetBuffer(0));
///////////////////////////////
//提取发送方
Tmp = buff.Mid(GetDataPos, lTmp);
GetDataPos += lTmp;
///////////////////////////////
//提取参数个数
Tmp = buff.Mid(GetDataPos, INPACKET_FLAG_BYTE);
GetDataPos += INPACKET_FLAG_BYTE;
lTmp = ctol(Tmp.GetBuffer(0));
int n = lTmp;
for(int i = 0; i < n; i++)
{
///////////////////////////////
//提取各参数的长度
Tmp = buff.Mid(GetDataPos, INPACKET_FLAG_BYTE);
GetDataPos += INPACKET_FLAG_BYTE;
lTmp = ctol(Tmp.GetBuffer(0));
///////////////////////////////
//提取各参数
strArray[i] = buff.Mid(GetDataPos, lTmp);
GetDataPos += lTmp;
}
}
CMsgBag::~CMsgBag()
{
}
/*---------------------------------------------------------------------------
数据包中修改命令号
--------------------------------------------------------------------------*/
void CMsgBag::ModifyOrderCode(CString &strOrder, CString& strDatePacket)
{
strDatePacket.Delete(ORDER_CODE_POS, INPACKET_FLAG_BYTE);
strDatePacket.Insert(ORDER_CODE_POS, strOrder.GetBuffer(0));
}
/*---------------------------------------------------------------------------
获取数据包长度
--------------------------------------------------------------------------*/
long CMsgBag::GetPacketLen(CString& strDatePacket)
{
CString strPacketLen = strDatePacket.Left(4);
return ctol(strPacketLen.GetBuffer(0));
}
/*---------------------------------------------------------------------------
获取数据包命令号并命令号转换成整形
--------------------------------------------------------------------------*/
long CMsgBag::GetOrderCode(CString& strDatePacket)
{
CString strOrderCode = strDatePacket.Mid(ORDER_CODE_POS, INPACKET_FLAG_BYTE);
return atoi(strOrderCode.GetBuffer(0));
}
/*---------------------------------------------------------------------------
获取数据包目的地用户帐号
--------------------------------------------------------------------------*/
CString CMsgBag::GetDesUserId(CString& strDatePacket)
{
CString strUserIdLen;
CString strDesUserId;
strUserIdLen = strDatePacket.Mid(SENDTO_LENGTH_POS, INPACKET_FLAG_BYTE);
long IdLen = CDataBag::ctol(strUserIdLen.GetBuffer(0));
strDesUserId = strDatePacket.Mid(SENDTO__POS, IdLen);
return strDesUserId;
}
/*---------------------------------------------------------------------------
设置数据包源用户帐号和帐号长度
--------------------------------------------------------------------------*/
void CMsgBag::SetSourUserId(CString& strSourUserId, CString& strDatePacket)
{
CString strOldIdLen;
CString strDesUserId;
strOldIdLen = strDatePacket.Mid(SENDTO_LENGTH_POS, INPACKET_FLAG_BYTE);
long OldIdLen = CDataBag::ctol(strOldIdLen.GetBuffer(0));
strDatePacket.Delete(SENDTO_LENGTH_POS, OldIdLen + INPACKET_FLAG_BYTE);
char strIdLen[5] = "";
CDataBag::ltoc(strIdLen, strSourUserId.GetLength());
strDatePacket.Insert(SENDTO_LENGTH_POS, strIdLen);
strDatePacket.Insert(SENDTO__POS, strSourUserId.GetBuffer(0));
}
/*---------------------------------------------------------------------------
修改数据包包长
--------------------------------------------------------------------------*/
void CMsgBag::ModifyPacketLen(CString& strDatePacket)
{
char strLen[5] = "";
long len = strDatePacket.GetLength();
CDataBag::ltoc(strLen, len - 4);
strDatePacket.Delete(PACKET_LENGTH_POS, INPACKET_FLAG_BYTE);
strDatePacket.Insert(PACKET_LENGTH_POS, strLen);
}
/*---------------------------------------------------------------------------
截取包头
--------------------------------------------------------------------------*/
CString CMsgBag::GetPacketHead(CString& strDatePacket)
{
CString strHead;
strHead = strDatePacket.Left(21);
return strHead;
}
/*---------------------------------------------------------------------------
设置服务器返回的消息状态
--------------------------------------------------------------------------*/
void CMsgBag::SetRetStatus(CString& strStatus, CString& strDatePacket)
{
strDatePacket.Delete(8, 4);
strDatePacket.Insert(8, strStatus.GetBuffer(0));
}
/*---------------------------------------------------------------------------
获取服务器返回的消息状态
--------------------------------------------------------------------------*/
long CMsgBag::GetRetStatus(CString& strDatePacket)
{
CString strStatus = strDatePacket.Mid(8, 4);
return atol(strStatus.GetBuffer(0));
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -