ProcessGateMsg.cpp
上传用户:szopptop
上传日期:2013-04-23
资源大小:1047k
文件大小:2k
源码类别:

模拟服务器

开发平台:

Visual C++

  1. #include "stdafx.h"
  2. extern CWHList<CGateInfo*> g_xGateInfoList;
  3. UINT WINAPI ProcessGateMsg(LPVOID lpParameter)
  4. {
  5. _TDEFAULTMESSAGE DefaultMsg;
  6. char *pszBegin, *pszEnd;
  7. int nCount;
  8. _TCREATECHR tCreateChr;
  9. PLISTNODE pListNode;
  10. CGateInfo* pGateInfo;
  11. while (TRUE)
  12. {
  13. if (g_xGateInfoList.GetCount())
  14. {
  15. pListNode = g_xGateInfoList.GetHead();
  16. while (pListNode)
  17. {
  18. pGateInfo = g_xGateInfoList.GetData(pListNode);
  19. if (pGateInfo)
  20. {
  21. nCount = pGateInfo->m_GateQ.GetCount();
  22. if (nCount)
  23. {
  24. for (int nLoop = 0; nLoop < nCount; nLoop++)
  25. {
  26. _LPTGATESENDBUFF pSendBuff = (_LPTGATESENDBUFF)pGateInfo->m_GateQ.PopQ();
  27. if (pSendBuff)
  28. {
  29. int nLen = memlen(pSendBuff->szData);
  30. if ((pszBegin = (char *)memchr(pSendBuff->szData, '#', nLen)) &&(pszEnd = (char *)memchr(pSendBuff->szData, '!', nLen)))
  31. {
  32. *pszEnd = '';
  33. fnDecodeMessageA(&DefaultMsg, (pszBegin + 2)); // 2 = "#?" ? = Check Code 
  34. switch (DefaultMsg.wIdent)
  35. {
  36. case CM_QUERYCHR:
  37. pGateInfo->QueryCharacter(pSendBuff->sock, (pszBegin + _DEFBLOCKSIZE + 2));
  38. break;
  39. case CM_NEWCHR:
  40. fnDecode6BitBufA((pszBegin + _DEFBLOCKSIZE + 2), (char *)&tCreateChr, sizeof(_TCREATECHR));
  41. pGateInfo->MakeNewCharacter(pSendBuff->sock, &tCreateChr);
  42. break;
  43. case CM_DELCHR:
  44. fnDecode6BitBufA((pszBegin + _DEFBLOCKSIZE + 2), (char *)&tCreateChr, sizeof(_TCREATECHR));
  45. pGateInfo->DeleteExistCharacter(pSendBuff->sock, &tCreateChr);
  46. break;
  47. case CM_SELCHR:
  48. pGateInfo->GetSelectCharacter(pSendBuff->sock, (pszBegin + _DEFBLOCKSIZE + 2));
  49. break;
  50. }
  51. }
  52. delete pSendBuff;
  53. }
  54. }
  55. }
  56. }
  57. pListNode = g_xGateInfoList.GetNext(pListNode);
  58. }
  59. }
  60. SleepEx(1, TRUE);
  61. }
  62. }