#ifndef PACKET_AIDE_HEAD_FILE #define PACKET_AIDE_HEAD_FILE #pragma once #pragma pack(1) ////////////////////////////////////////////////////////////////////////////////// //数据定义 #define DTP_NULL 0 //无效数据 //数据描述 struct tagDataDescribe { WORD wDataSize; //数据大小 WORD wDataDescribe; //数据描述 }; ////////////////////////////////////////////////////////////////////////////////// //发送辅助类 class CSendPacketHelper { //变量定义 protected: WORD m_wDataSize; //数据大小 WORD m_wMaxBytes; //缓冲大小 LPBYTE m_pcbBuffer; //缓冲指针 //函数定义 public: //构造函数 inline CSendPacketHelper(VOID * pcbBuffer, WORD wMaxBytes); //功能函数 public: //清理数据 inline VOID CleanData() { m_wDataSize=0; } //获取大小 inline WORD GetDataSize() { return m_wDataSize; } //获取缓冲 inline VOID * GetDataBuffer() { return m_pcbBuffer; } //功能函数 public: //插入字符 inline bool AddPacket(LPCSTR pszString, WORD wDataType); //插入字符 inline bool AddPacket(LPCWSTR pszString, WORD wDataType); //插入数据 inline bool AddPacket(VOID * pData, WORD wDataSize, WORD wDataType); }; ////////////////////////////////////////////////////////////////////////////////// //接收辅助类 class CRecvPacketHelper { //变量定义 protected: WORD m_wDataPos; //数据点 WORD m_wDataSize; //数据大小 LPBYTE m_pcbBuffer; //缓冲指针 //函数定义 public: //构造函数 inline CRecvPacketHelper(LPCVOID pcbBuffer, WORD wDataSize); //功能函数 public: //获取数据 inline VOID * GetData(tagDataDescribe & DataDescribe); }; ////////////////////////////////////////////////////////////////////////////////// //构造函数 CSendPacketHelper::CSendPacketHelper(VOID * pcbBuffer, WORD wMaxBytes) { //设置变量 m_wDataSize=0; m_wMaxBytes=wMaxBytes; m_pcbBuffer=(BYTE *)pcbBuffer; return; } //插入字符 bool CSendPacketHelper::AddPacket(LPCSTR pszString, WORD wDataType) { //参数判断 ASSERT(pszString!=NULL); if (pszString[0]==0) return true; //插入数据 return AddPacket((VOID *)pszString,CountStringBufferA(pszString),wDataType); } //插入字符 bool CSendPacketHelper::AddPacket(LPCWSTR pszString, WORD wDataType) { //参数判断 ASSERT(pszString!=NULL); if (pszString[0]==0) return true; //插入数据 return AddPacket((VOID *)pszString,CountStringBufferW(pszString),wDataType); } //插入数据 bool CSendPacketHelper::AddPacket(VOID * pData, WORD wDataSize, WORD wDataType) { //效验数据 ASSERT(wDataType!=DTP_NULL); ASSERT((wDataSize+sizeof(tagDataDescribe)+m_wDataSize)<=m_wMaxBytes); if ((wDataSize+sizeof(tagDataDescribe)+m_wDataSize)>m_wMaxBytes) return false; //插入数据 ASSERT(m_pcbBuffer!=NULL); tagDataDescribe * pDataDescribe=(tagDataDescribe *)(m_pcbBuffer+m_wDataSize); pDataDescribe->wDataSize=wDataSize; pDataDescribe->wDataDescribe=wDataType; //插入数据 if (wDataSize>0) { ASSERT(pData!=NULL); CopyMemory(pDataDescribe+1,pData,wDataSize); } //设置数据 m_wDataSize+=sizeof(tagDataDescribe)+wDataSize; return true; } ////////////////////////////////////////////////////////////////////////////////// //构造函数 CRecvPacketHelper::CRecvPacketHelper(LPCVOID pcbBuffer, WORD wDataSize) { //设置变量 m_wDataPos=0; m_wDataSize=wDataSize; m_pcbBuffer=(BYTE *)pcbBuffer; return; } //获取数据 VOID * CRecvPacketHelper::GetData(tagDataDescribe & DataDescribe) { //效验数据 if (m_wDataPos>=m_wDataSize) { ASSERT(m_wDataPos==m_wDataSize); DataDescribe.wDataSize=0; DataDescribe.wDataDescribe=DTP_NULL; return NULL; } //获取数据 ASSERT((m_wDataPos+sizeof(tagDataDescribe))<=m_wDataSize); CopyMemory(&DataDescribe,m_pcbBuffer+m_wDataPos,sizeof(tagDataDescribe)); ASSERT((m_wDataPos+sizeof(tagDataDescribe)+DataDescribe.wDataSize)<=m_wDataSize); //效验数据 if ((m_wDataPos+sizeof(tagDataDescribe)+DataDescribe.wDataSize)>m_wDataSize) { DataDescribe.wDataSize=0; DataDescribe.wDataDescribe=DTP_NULL; return NULL; } //设置数据 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