诸暨麻将添加redis
選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。
 
 
 
 
 
 

189 行
4.4 KiB

  1. #ifndef PACKET_AIDE_HEAD_FILE
  2. #define PACKET_AIDE_HEAD_FILE
  3. #pragma once
  4. #pragma pack(1)
  5. //////////////////////////////////////////////////////////////////////////////////
  6. //数据定义
  7. #define DTP_NULL 0 //无效数据
  8. //数据描述
  9. struct tagDataDescribe
  10. {
  11. WORD wDataSize; //数据大小
  12. WORD wDataDescribe; //数据描述
  13. };
  14. //////////////////////////////////////////////////////////////////////////////////
  15. //发送辅助类
  16. class CSendPacketHelper
  17. {
  18. //变量定义
  19. protected:
  20. WORD m_wDataSize; //数据大小
  21. WORD m_wMaxBytes; //缓冲大小
  22. LPBYTE m_pcbBuffer; //缓冲指针
  23. //函数定义
  24. public:
  25. //构造函数
  26. inline CSendPacketHelper(VOID * pcbBuffer, WORD wMaxBytes);
  27. //功能函数
  28. public:
  29. //清理数据
  30. inline VOID CleanData() { m_wDataSize=0; }
  31. //获取大小
  32. inline WORD GetDataSize() { return m_wDataSize; }
  33. //获取缓冲
  34. inline VOID * GetDataBuffer() { return m_pcbBuffer; }
  35. //功能函数
  36. public:
  37. //插入字符
  38. inline bool AddPacket(LPCSTR pszString, WORD wDataType);
  39. //插入字符
  40. inline bool AddPacket(LPCWSTR pszString, WORD wDataType);
  41. //插入数据
  42. inline bool AddPacket(VOID * pData, WORD wDataSize, WORD wDataType);
  43. };
  44. //////////////////////////////////////////////////////////////////////////////////
  45. //接收辅助类
  46. class CRecvPacketHelper
  47. {
  48. //变量定义
  49. protected:
  50. WORD m_wDataPos; //数据点
  51. WORD m_wDataSize; //数据大小
  52. LPBYTE m_pcbBuffer; //缓冲指针
  53. //函数定义
  54. public:
  55. //构造函数
  56. inline CRecvPacketHelper(LPCVOID pcbBuffer, WORD wDataSize);
  57. //功能函数
  58. public:
  59. //获取数据
  60. inline VOID * GetData(tagDataDescribe & DataDescribe);
  61. };
  62. //////////////////////////////////////////////////////////////////////////////////
  63. //构造函数
  64. CSendPacketHelper::CSendPacketHelper(VOID * pcbBuffer, WORD wMaxBytes)
  65. {
  66. //设置变量
  67. m_wDataSize=0;
  68. m_wMaxBytes=wMaxBytes;
  69. m_pcbBuffer=(BYTE *)pcbBuffer;
  70. return;
  71. }
  72. //插入字符
  73. bool CSendPacketHelper::AddPacket(LPCSTR pszString, WORD wDataType)
  74. {
  75. //参数判断
  76. ASSERT(pszString!=NULL);
  77. if (pszString[0]==0) return true;
  78. //插入数据
  79. return AddPacket((VOID *)pszString,CountStringBufferA(pszString),wDataType);
  80. }
  81. //插入字符
  82. bool CSendPacketHelper::AddPacket(LPCWSTR pszString, WORD wDataType)
  83. {
  84. //参数判断
  85. ASSERT(pszString!=NULL);
  86. if (pszString[0]==0) return true;
  87. //插入数据
  88. return AddPacket((VOID *)pszString,CountStringBufferW(pszString),wDataType);
  89. }
  90. //插入数据
  91. bool CSendPacketHelper::AddPacket(VOID * pData, WORD wDataSize, WORD wDataType)
  92. {
  93. //效验数据
  94. ASSERT(wDataType!=DTP_NULL);
  95. ASSERT((wDataSize+sizeof(tagDataDescribe)+m_wDataSize)<=m_wMaxBytes);
  96. if ((wDataSize+sizeof(tagDataDescribe)+m_wDataSize)>m_wMaxBytes) return false;
  97. //插入数据
  98. ASSERT(m_pcbBuffer!=NULL);
  99. tagDataDescribe * pDataDescribe=(tagDataDescribe *)(m_pcbBuffer+m_wDataSize);
  100. pDataDescribe->wDataSize=wDataSize;
  101. pDataDescribe->wDataDescribe=wDataType;
  102. //插入数据
  103. if (wDataSize>0)
  104. {
  105. ASSERT(pData!=NULL);
  106. CopyMemory(pDataDescribe+1,pData,wDataSize);
  107. }
  108. //设置数据
  109. m_wDataSize+=sizeof(tagDataDescribe)+wDataSize;
  110. return true;
  111. }
  112. //////////////////////////////////////////////////////////////////////////////////
  113. //构造函数
  114. CRecvPacketHelper::CRecvPacketHelper(LPCVOID pcbBuffer, WORD wDataSize)
  115. {
  116. //设置变量
  117. m_wDataPos=0;
  118. m_wDataSize=wDataSize;
  119. m_pcbBuffer=(BYTE *)pcbBuffer;
  120. return;
  121. }
  122. //获取数据
  123. VOID * CRecvPacketHelper::GetData(tagDataDescribe & DataDescribe)
  124. {
  125. //效验数据
  126. if (m_wDataPos>=m_wDataSize)
  127. {
  128. ASSERT(m_wDataPos==m_wDataSize);
  129. DataDescribe.wDataSize=0;
  130. DataDescribe.wDataDescribe=DTP_NULL;
  131. return NULL;
  132. }
  133. //获取数据
  134. ASSERT((m_wDataPos+sizeof(tagDataDescribe))<=m_wDataSize);
  135. CopyMemory(&DataDescribe,m_pcbBuffer+m_wDataPos,sizeof(tagDataDescribe));
  136. ASSERT((m_wDataPos+sizeof(tagDataDescribe)+DataDescribe.wDataSize)<=m_wDataSize);
  137. //效验数据
  138. if ((m_wDataPos+sizeof(tagDataDescribe)+DataDescribe.wDataSize)>m_wDataSize)
  139. {
  140. DataDescribe.wDataSize=0;
  141. DataDescribe.wDataDescribe=DTP_NULL;
  142. return NULL;
  143. }
  144. //设置数据
  145. VOID * pData=NULL;
  146. if (DataDescribe.wDataSize>0) pData=m_pcbBuffer+m_wDataPos+sizeof(tagDataDescribe);
  147. m_wDataPos+=sizeof(tagDataDescribe)+DataDescribe.wDataSize;
  148. return pData;
  149. };
  150. //////////////////////////////////////////////////////////////////////////////////
  151. #pragma pack()
  152. #endif