Files

178 lines
3.9 KiB
C
Raw Permalink Normal View History

2026-03-03 13:56:44 +08:00
#ifndef PACKET_AIDE_HEAD_FILE
#define PACKET_AIDE_HEAD_FILE
#include "Types.h"
#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
{
uint16 wDataSize; //<2F><><EFBFBD>ݴ<EFBFBD>С
uint16 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:
uint16 m_wDataSize; //<2F><><EFBFBD>ݴ<EFBFBD>С
uint16 m_wMaxBytes; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С
uint8* m_pcbBuffer; //<2F><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
public:
//<2F><><EFBFBD><EFBFBD><ECBAAF>
inline CSendPacketHelper(void * pcbBuffer, uint16 wMaxBytes);
//<2F><><EFBFBD>ܺ<EFBFBD><DCBA><EFBFBD>
public:
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
inline void CleanData() { m_wDataSize=0; }
//<2F><>ȡ<EFBFBD><C8A1>С
inline uint16 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(char* pszString , uint16 wDataType);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
inline bool AddPacket(void * pData, uint16 wDataSize, uint16 wDataType);
};
//////////////////////////////////////////////////////////////////////////////////
//<2F><><EFBFBD>ո<EFBFBD><D5B8><EFBFBD><EFBFBD><EFBFBD>
class CRecvPacketHelper
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
protected:
uint16 m_wDataPos; //<2F><><EFBFBD>ݵ<EFBFBD>
uint16 m_wDataSize; //<2F><><EFBFBD>ݴ<EFBFBD>С
uint8* m_pcbBuffer; //<2F><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
public:
//<2F><><EFBFBD><EFBFBD><ECBAAF>
inline CRecvPacketHelper(void * pcbBuffer, uint16 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, uint16 wMaxBytes)
{
//<2F><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>
m_wDataSize=0;
m_wMaxBytes=wMaxBytes;
m_pcbBuffer=(uint8 *)pcbBuffer;
return;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD>
bool CSendPacketHelper::AddPacket(char* pszString,uint16 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,strlen(pszString),wDataType);
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
bool CSendPacketHelper::AddPacket(void * pData, uint16 wDataSize, uint16 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);
memcpy(pDataDescribe+1,pData,wDataSize);
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_wDataSize+=sizeof(tagDataDescribe)+wDataSize;
return true;
}
//////////////////////////////////////////////////////////////////////////////////
//<2F><><EFBFBD><EFBFBD><ECBAAF>
CRecvPacketHelper::CRecvPacketHelper(void* pcbBuffer, uint16 wDataSize)
{
//<2F><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>
m_wDataPos=0;
m_wDataSize=wDataSize;
m_pcbBuffer=(uint8 *)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);
memcpy(&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