ProtocolFunc.cpp
上传用户:swkcbjrc
上传日期:2016-04-02
资源大小:45277k
文件大小:6k
源码类别:

游戏

开发平台:

Visual C++

  1. // ProtocolFunc.cpp: implementation of the ProtocolFunc class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4. #include "stdafx.h"
  5. #include "Protocol.h"
  6. #include "ProtocolFunc.h"
  7. #ifdef _DEBUG
  8. #undef THIS_FILE
  9. static char THIS_FILE[]=__FILE__;
  10. #define new DEBUG_NEW
  11. #endif
  12. //////////////////////////////////////////////////////////////////////
  13. // Construction/Destruction
  14. //////////////////////////////////////////////////////////////////////
  15. ProtocolFunc::ProtocolFunc()
  16. {
  17. }
  18. ProtocolFunc::~ProtocolFunc()
  19. {
  20. }
  21. void ProtocolFunc::DeleteMateList(CPtrList* pMateList)
  22. {
  23. for(int i=0;i<pMateList->GetCount();i++)
  24. {
  25. LPNODEMATE pNodeMate=(LPNODEMATE)(pMateList->GetAt(pMateList->FindIndex(i)));
  26. if(pNodeMate!=NULL)
  27. {
  28. delete pNodeMate;
  29. pNodeMate=NULL;
  30. }
  31. }
  32. pMateList->RemoveAll();
  33. }
  34. //取得协议信息内容
  35. //input: 信息文本,开始关键字,结束关键字,内容地址
  36. //output: void
  37. void ProtocolFunc::GetProtoContent(CString strProtoText,CString strKeyStart,
  38.  CString strKeyEnd,CString& strContent)
  39. {
  40. strContent="";
  41. if(strKeyStart.IsEmpty()||strKeyEnd.IsEmpty())
  42. return;
  43. int nStart=strProtoText.Find(strKeyStart,0);
  44. if(nStart<0)
  45. return;
  46. nStart+=strKeyStart.GetLength();
  47. int nEnd=strProtoText.Find(strKeyEnd,nStart);
  48. if(nEnd<0)
  49. return;
  50. strContent=strProtoText.Mid(nStart,nEnd-nStart);
  51. }
  52. //取得结束关键字
  53. //input: 开始关键字,结束关键字地址
  54. //output: void
  55. void ProtocolFunc::GetProtoLineEnd(CString strStart,CString& strEnd)
  56. {
  57. strEnd="";
  58. if(strStart.IsEmpty())
  59. return;
  60. int nStart=0;
  61. nStart=strStart.Find("<",nStart);
  62. if(nStart<0)
  63. return;
  64. nStart+=1;
  65. strEnd="</" + strStart.Right(strStart.GetLength()-1);
  66. }
  67. //通过协议文字取得列表
  68. //input: 协议内容,列表指针,特殊标记
  69. //output: void
  70. //##ModelId=3B394E3101B5
  71. void ProtocolFunc::GetListBySign(CString strText,
  72.   CPtrList* pListTemp,
  73.   CString strSign)
  74. {
  75. if(pListTemp==NULL||strSign.IsEmpty())
  76. return;
  77. int nStartPos,nEndPos;
  78. nStartPos=0;
  79. nEndPos=0;
  80. //strFileBuffer.Replace('n',NULL);
  81. strText.TrimLeft("rn");
  82. strText.TrimRight("rn");
  83. int nLengthAll=strText.GetLength();
  84. while(1)
  85. {
  86. if(nStartPos>=nLengthAll)
  87. return;
  88. nEndPos=strText.Find(strSign,nStartPos);
  89. if(nEndPos<=0)
  90. return;
  91. CString strContent;
  92. int nLength=nEndPos-nStartPos;
  93. if(nLength<=0)
  94. return;
  95. strContent=strText.Mid(nStartPos,nLength);
  96. strContent.TrimLeft("rn");
  97. strContent.TrimRight("rn");
  98. LPNODESTRING pNodeString=new NODESTRING;
  99. pNodeString->strContent=strContent;
  100. pListTemp->AddTail(pNodeString);
  101. nStartPos=nEndPos+1;
  102. }
  103. }
  104. //使用两个标记区分一个列表
  105. //input: 信息缓冲,列表指针,标志1,标志2
  106. //output: void
  107. //##ModelId=3B394E3101DD
  108. void ProtocolFunc::GetListByTwoSign(CString strText,
  109. CPtrList* pListTemp,CString strMidSign,
  110. CString strEndSign)
  111. {
  112. if(pListTemp==NULL||strText.IsEmpty()||strMidSign.IsEmpty()||
  113. strEndSign.IsEmpty())
  114. return;
  115. int nStartPos,nEndPos;
  116. nStartPos=0;
  117. nEndPos=0;
  118. //strFileBuffer.Replace('n',NULL);
  119. strText.TrimLeft("rn");
  120. strText.TrimRight("rn");
  121. int nLengthAll=strText.GetLength();
  122. while(1)
  123. {
  124. if(nStartPos>=nLengthAll)
  125. return;
  126. nEndPos=strText.Find(strEndSign,nStartPos);
  127. if(nEndPos<=0)
  128. nEndPos=strText.GetLength()+1;
  129. CString strContent;
  130. int nLength=nEndPos-nStartPos;
  131. if(nLength<=0)
  132. return;
  133. strContent=strText.Mid(nStartPos,nLength);
  134. strContent.TrimLeft("rn");
  135. strContent.TrimRight("rn");
  136. int nMidSignPos=0;
  137. nMidSignPos=strContent.Find(strMidSign,0);
  138. if(nMidSignPos>0)
  139. {
  140. CString strKey=strContent.Left(nMidSignPos);
  141. int nLineLength=strContent.GetLength();
  142. CString strValue=strContent.Right(nLineLength-nMidSignPos-1);
  143. LPNODEMATE pNode=new NODEMATE;
  144. pNode->strMateName=strKey;
  145. pNode->strMateValue =strValue;
  146. pListTemp->AddTail(pNode);
  147. }
  148. nStartPos=nEndPos+1;
  149. }
  150. }
  151. //从列表中取得指定信息
  152. //input: 关键字,输出信息内存,列表指针
  153. //output: void
  154. //##ModelId=3B394E310205
  155. void ProtocolFunc::GetValueFromList(CString strKey,
  156.  CString& strValue,
  157.  CPtrList* pListTemp)
  158. {
  159. if(strKey.IsEmpty())
  160. return;
  161. for(int i=0;i<pListTemp->GetCount();i++)
  162. {
  163. POSITION pos=pListTemp->FindIndex(i);
  164. if(pos==NULL)
  165. continue;
  166. LPNODEMATE pNode=(LPNODEMATE)pListTemp->GetAt(pos);
  167. if(pNode==NULL)
  168. continue;
  169. CString strKeyTemp=pNode->strMateName;
  170. CString strValueTemp=pNode->strMateValue;
  171. if(strKeyTemp==strKey)
  172. {
  173. strValue=strValueTemp;
  174. return;
  175. }
  176. }
  177. }
  178. //删除列表
  179. //input: 列表指针
  180. //output: void
  181. //##ModelId=3B394E31022D
  182. void ProtocolFunc::ReleaseList(CPtrList* pListTemp)
  183. {
  184. for(int i=0;i<pListTemp->GetCount();i++)
  185. {
  186. POSITION pos=pListTemp->FindIndex(i);
  187. if(pos==NULL)
  188. continue;
  189. LPNODESTRING pNodeString=(LPNODESTRING)pListTemp->GetAt(pos);
  190. if(pNodeString==NULL)
  191. continue;
  192. delete pNodeString;
  193. }
  194. pListTemp->RemoveAll();
  195. }
  196. //替换MATELIST
  197. //input: 列表指针,需要替换的内存区
  198. //output: void
  199. void ProtocolFunc::ReplaceMateList(CPtrList* pMateList,CString& strFileBuffer)
  200. {
  201. ASSERT(pMateList!=NULL);
  202. ASSERT(!strFileBuffer.IsEmpty());
  203. if(strFileBuffer.IsEmpty()||pMateList==NULL)
  204. return;
  205. for(int i=0;i<pMateList->GetCount();i++)
  206. {
  207. LPNODEMATE pMate=(LPNODEMATE)(pMateList->GetAt(pMateList->FindIndex(i)));
  208. if(pMate)
  209. {
  210. CString strMateName=pMate->strMateName;
  211. CString strMateValue=pMate->strMateValue;
  212. strMateName="<%" + strMateName + "%>";
  213. int nStart=0;
  214. int nResult;
  215. while((nResult=strFileBuffer.Find(strMateName,nStart))>=0)
  216. {
  217. int nRightCount=0;
  218. int nTemp=strFileBuffer.GetLength();
  219. int nTotal=strFileBuffer.GetLength();
  220. int nNameLength=strMateName.GetLength();
  221. nRightCount=nTotal-nResult-nNameLength;
  222. CString strTemp;
  223. strTemp=strFileBuffer.Left(nResult) + strMateValue + strFileBuffer.Right(nRightCount);
  224. nTemp=strTemp.GetLength();
  225. strFileBuffer="";
  226. strFileBuffer=strTemp;
  227. nStart=nResult+strMateName.GetLength();
  228. }
  229. }
  230. }
  231. }