189 lines
4.2 KiB
C
189 lines
4.2 KiB
C
|
|
#ifndef PACKET_AIDE_HEAD_FILE
|
|||
|
|
#define PACKET_AIDE_HEAD_FILE
|
|||
|
|
|
|||
|
|
#pragma once
|
|||
|
|
|
|||
|
|
#pragma pack(1)
|
|||
|
|
|
|||
|
|
//////////////////////////////////////////////////////////////////////////////////
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>ݶ<EFBFBD><DDB6><EFBFBD>
|
|||
|
|
#define DTP_NULL 0 //<2F><>Ч<EFBFBD><D0A7><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
struct tagDataDescribe
|
|||
|
|
{
|
|||
|
|
WORD wDataSize; //<2F><><EFBFBD>ݴ<EFBFBD>С
|
|||
|
|
WORD wDataDescribe; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
//////////////////////////////////////////////////////////////////////////////////
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><CDB8><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
class CSendPacketHelper
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
protected:
|
|||
|
|
WORD m_wDataSize; //<2F><><EFBFBD>ݴ<EFBFBD>С
|
|||
|
|
WORD m_wMaxBytes; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С
|
|||
|
|
LPBYTE m_pcbBuffer; //<2F><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
public:
|
|||
|
|
//<2F><><EFBFBD>캯<EFBFBD><ECBAAF>
|
|||
|
|
inline CSendPacketHelper(VOID * pcbBuffer, WORD wMaxBytes);
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>ܺ<EFBFBD><DCBA><EFBFBD>
|
|||
|
|
public:
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
inline VOID CleanData() { m_wDataSize=0; }
|
|||
|
|
//<2F><>ȡ<EFBFBD><C8A1>С
|
|||
|
|
inline WORD GetDataSize() { return m_wDataSize; }
|
|||
|
|
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
|
|||
|
|
inline VOID * GetDataBuffer() { return m_pcbBuffer; }
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>ܺ<EFBFBD><DCBA><EFBFBD>
|
|||
|
|
public:
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD>
|
|||
|
|
inline bool AddPacket(LPCSTR pszString, WORD wDataType);
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD>
|
|||
|
|
inline bool AddPacket(LPCWSTR pszString, WORD wDataType);
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
inline bool AddPacket(VOID * pData, WORD wDataSize, WORD wDataType);
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
//////////////////////////////////////////////////////////////////////////////////
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>ո<EFBFBD><D5B8><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
class CRecvPacketHelper
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
protected:
|
|||
|
|
WORD m_wDataPos; //<2F><><EFBFBD>ݵ<EFBFBD>
|
|||
|
|
WORD m_wDataSize; //<2F><><EFBFBD>ݴ<EFBFBD>С
|
|||
|
|
LPBYTE m_pcbBuffer; //<2F><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
public:
|
|||
|
|
//<2F><><EFBFBD>캯<EFBFBD><ECBAAF>
|
|||
|
|
inline CRecvPacketHelper(LPCVOID pcbBuffer, WORD wDataSize);
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>ܺ<EFBFBD><DCBA><EFBFBD>
|
|||
|
|
public:
|
|||
|
|
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
|
|||
|
|
inline VOID * GetData(tagDataDescribe & DataDescribe);
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
//////////////////////////////////////////////////////////////////////////////////
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>캯<EFBFBD><ECBAAF>
|
|||
|
|
CSendPacketHelper::CSendPacketHelper(VOID * pcbBuffer, WORD wMaxBytes)
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>
|
|||
|
|
m_wDataSize=0;
|
|||
|
|
m_wMaxBytes=wMaxBytes;
|
|||
|
|
m_pcbBuffer=(BYTE *)pcbBuffer;
|
|||
|
|
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD>
|
|||
|
|
bool CSendPacketHelper::AddPacket(LPCSTR pszString, WORD wDataType)
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
|
|||
|
|
ASSERT(pszString!=NULL);
|
|||
|
|
if (pszString[0]==0) return true;
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
return AddPacket((VOID *)pszString,CountStringBufferA(pszString),wDataType);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD>
|
|||
|
|
bool CSendPacketHelper::AddPacket(LPCWSTR pszString, WORD wDataType)
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
|
|||
|
|
ASSERT(pszString!=NULL);
|
|||
|
|
if (pszString[0]==0) return true;
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
return AddPacket((VOID *)pszString,CountStringBufferW(pszString),wDataType);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
bool CSendPacketHelper::AddPacket(VOID * pData, WORD wDataSize, WORD wDataType)
|
|||
|
|
{
|
|||
|
|
//Ч<><D0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
ASSERT(wDataType!=DTP_NULL);
|
|||
|
|
ASSERT((wDataSize+sizeof(tagDataDescribe)+m_wDataSize)<=m_wMaxBytes);
|
|||
|
|
if ((wDataSize+sizeof(tagDataDescribe)+m_wDataSize)>m_wMaxBytes) return false;
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
ASSERT(m_pcbBuffer!=NULL);
|
|||
|
|
tagDataDescribe * pDataDescribe=(tagDataDescribe *)(m_pcbBuffer+m_wDataSize);
|
|||
|
|
pDataDescribe->wDataSize=wDataSize;
|
|||
|
|
pDataDescribe->wDataDescribe=wDataType;
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
if (wDataSize>0)
|
|||
|
|
{
|
|||
|
|
ASSERT(pData!=NULL);
|
|||
|
|
CopyMemory(pDataDescribe+1,pData,wDataSize);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
m_wDataSize+=sizeof(tagDataDescribe)+wDataSize;
|
|||
|
|
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//////////////////////////////////////////////////////////////////////////////////
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>캯<EFBFBD><ECBAAF>
|
|||
|
|
CRecvPacketHelper::CRecvPacketHelper(LPCVOID pcbBuffer, WORD wDataSize)
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>
|
|||
|
|
m_wDataPos=0;
|
|||
|
|
m_wDataSize=wDataSize;
|
|||
|
|
m_pcbBuffer=(BYTE *)pcbBuffer;
|
|||
|
|
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
|
|||
|
|
VOID * CRecvPacketHelper::GetData(tagDataDescribe & DataDescribe)
|
|||
|
|
{
|
|||
|
|
//Ч<><D0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
if (m_wDataPos>=m_wDataSize)
|
|||
|
|
{
|
|||
|
|
ASSERT(m_wDataPos==m_wDataSize);
|
|||
|
|
DataDescribe.wDataSize=0;
|
|||
|
|
DataDescribe.wDataDescribe=DTP_NULL;
|
|||
|
|
return NULL;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
|
|||
|
|
ASSERT((m_wDataPos+sizeof(tagDataDescribe))<=m_wDataSize);
|
|||
|
|
CopyMemory(&DataDescribe,m_pcbBuffer+m_wDataPos,sizeof(tagDataDescribe));
|
|||
|
|
ASSERT((m_wDataPos+sizeof(tagDataDescribe)+DataDescribe.wDataSize)<=m_wDataSize);
|
|||
|
|
|
|||
|
|
//Ч<><D0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
if ((m_wDataPos+sizeof(tagDataDescribe)+DataDescribe.wDataSize)>m_wDataSize)
|
|||
|
|
{
|
|||
|
|
DataDescribe.wDataSize=0;
|
|||
|
|
DataDescribe.wDataDescribe=DTP_NULL;
|
|||
|
|
return NULL;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
VOID * pData=NULL;
|
|||
|
|
if (DataDescribe.wDataSize>0) pData=m_pcbBuffer+m_wDataPos+sizeof(tagDataDescribe);
|
|||
|
|
m_wDataPos+=sizeof(tagDataDescribe)+DataDescribe.wDataSize;
|
|||
|
|
|
|||
|
|
return pData;
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
//////////////////////////////////////////////////////////////////////////////////
|
|||
|
|
|
|||
|
|
#pragma pack()
|
|||
|
|
|
|||
|
|
#endif
|