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

模拟服务器

开发平台:

Visual C++

  1. #include "stdafx.h"
  2. extern HWND g_hStatusBar;
  3. extern CWHList<CGateInfo*> g_xGateList;
  4. UINT WINAPI ThreadFuncForMsg(LPVOID lpParameter)
  5. {
  6. _TDEFAULTMESSAGE DefaultMsg;
  7. char *pszBegin, *pszEnd;
  8. int nCount;
  9. PLISTNODE pListNode;
  10. CGateInfo* pGateInfo;
  11. while (TRUE)
  12. {
  13. if (g_xGateList.GetCount())
  14. {
  15. pListNode = g_xGateList.GetHead();
  16. while (pListNode)
  17. {
  18. pGateInfo = g_xGateList.GetData(pListNode);
  19. if (pGateInfo)
  20. {
  21. nCount = pGateInfo->g_SendToGateQ.GetCount();
  22. if (nCount)
  23. {
  24. for (int nLoop = 0; nLoop < nCount; nLoop++)
  25. {
  26. _LPTSENDBUFF pSendBuff = (_LPTSENDBUFF)pGateInfo->g_SendToGateQ.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_PROTOCOL:
  37. break;
  38. case CM_IDPASSWORD:
  39. pGateInfo->ProcLogin(pSendBuff->sock, pszBegin + DEFBLOCKSIZE + 2);
  40. break;
  41. case CM_SELECTSERVER:
  42. pGateInfo->ProcSelectServer(pSendBuff->sock, DefaultMsg.wParam);
  43. break;
  44. case CM_ADDNEWUSER:
  45. pGateInfo->ProcAddUser(pSendBuff->sock, pszBegin + DEFBLOCKSIZE + 2);
  46. break;
  47. case CM_UPDATEUSER:
  48. break;
  49. case CM_CHANGEPASSWORD:
  50. break;
  51. }
  52. }
  53. delete pSendBuff;
  54. pSendBuff = NULL;
  55. }
  56. }
  57. }
  58. }
  59. pListNode = g_xGateList.GetNext(pListNode);
  60. }
  61. }
  62. SleepEx(1, TRUE);
  63. }
  64. return 0;
  65. }