Advertisement
Guest User

Untitled

a guest
May 2nd, 2016
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.77 KB | None | 0 0
  1. DWORD CTMapSvrModule::WorkThread()
  2. {
  3. BOOL bRun = TRUE;
  4.  
  5. while(bRun)
  6. {
  7. DWORD dwCompKey = COMP_NULL;
  8. DWORD dwIoBytes = 0;
  9.  
  10. LPOVERLAPPED pOV = NULL;
  11.  
  12. if(!GetQueuedCompletionStatus(
  13. m_hIocpWork,
  14. &dwIoBytes,
  15. &dwCompKey,
  16. &pOV, INFINITE) &&
  17. GetLastError() != WAIT_TIMEOUT && GetLastError() != 1236L )
  18. {
  19. switch(dwCompKey)
  20. {
  21. case COMP_SESSION :
  22. if(pOV)
  23. {
  24. CTMapSession *pSession = (CTMapSession *) ((COverlappedEx *) pOV)->m_pOBJ;
  25. BYTE bTYPE = ((COverlappedEx *) pOV)->m_bTYPE;
  26.  
  27. switch(bTYPE)
  28. {
  29. case TOV_SSN_RECV :
  30. if(pSession->m_bSessionType == SESSION_SERVER)
  31. {
  32. LogEvent("WorkThread CompletionStatus %d\n", GetLastError());
  33. }
  34. if(pSession->m_bSessionType != SESSION_SERVER)
  35. OnInvalidSession(pSession);
  36.  
  37. break;
  38.  
  39. // ***** IOCP »çżëąý Áß ľËľĆł»±â Čűµç Ăąąř° ±¸ą® (Ľ­ąöĂř ĽĽĽÇ Áľ·á) *****
  40. //
  41. // Ľ­ąö°ˇ ¸ŐŔú closesocket()Ŕ» ČŁĂâÇĎż© ĽĽĽÇŔ» Áľ·áÇŃ °ćżěŔ̸ç
  42. // WSARecv()°ˇ ČŁĂâµČ »óĹÂżˇĽ­¸¸ ŔĚ ÄÚµĺ·Î µéľîżŔ¸ç
  43. // ¸đµç żŔąö·¦ żŔĆŰ·ˇŔĚĽÇŔĚ Áľ·áµČ »óĹÂṞ́⠶§ą®żˇ
  44. // ŔĚ ĽŇÄĎ ÇÚµé°ú °ü·ĂµČ µĄŔĚŸ´Â IOCPĹĄżˇ ł˛ľĆŔÖÁö ľĘ´Ů.
  45. // µű¶óĽ­ ŔĚ ˝ş·ąµĺżˇĽ­´Â ÇŘ´ç ĽĽĽÇżˇ °ü·ĂµČ ŔŰľ÷ ¸í·ÉŔ» ´őŔĚ»ó ĽöÇŕÇĎÁö ľĘ±â ¶§ą®żˇ
  46. // ´Ů¸Ą ˝ş·ąµĺ°ˇ Çă¶ôÇѴٸé ŔĚ ±¸ą®żˇĽ­ ĽĽĽÇ Ć÷ŔÎĹ͸¦ »čÁ¦Çصµ ą«ąćÇĎ´Ů.
  47. // ĽĽĽÇŔ» »čÁ¦ ÇϴµĄ °ˇŔĺ ÁÁŔş ÁöÁˇŔ̹ǷΠŔüĂĽ ˝Ă˝şĹŰ Ľł°č˝Ă
  48. // Á¤»óŔűŔÎ ĽĽĽÇ Áľ·á´Â Ľ­ąöĂřżˇĽ­ ¸ŐŔú ĽĽĽÇŔ» Áľ·á˝ĂĹ°µµ·Ď Ľł°čÇĎ´Â °ÍŔĚ ľČŔüÇĎ´Ů.
  49. break;
  50. case TOV_SSN_SEND:
  51. OnSendComplete(pSession, 0);
  52. break;
  53. }
  54. }
  55. break;
  56. }
  57. }
  58. else if(pOV)
  59. {
  60. BYTE bTYPE = ((COverlappedEx *) pOV)->m_bTYPE;
  61.  
  62. switch(dwCompKey)
  63. {
  64. case COMP_SESSION :
  65. {
  66. CTMapSession *pSession = (CTMapSession *) ((COverlappedEx *) pOV)->m_pOBJ;
  67.  
  68. switch(bTYPE)
  69. {
  70. case TOV_SSN_RECV :
  71. if(pSession)
  72. ProcessSession( pSession, dwIoBytes);
  73.  
  74. break;
  75.  
  76. case TOV_SSN_SEND :
  77. if(pSession)
  78. OnSendComplete( pSession, dwIoBytes);
  79.  
  80. break;
  81. }
  82. }
  83. break;
  84. }
  85. }
  86. else
  87. {
  88. switch(dwCompKey)
  89. {
  90. case COMP_EXIT :
  91. {
  92. PostQueuedCompletionStatus(
  93. m_hIocpWork, 0,
  94. COMP_EXIT, NULL);
  95.  
  96. bRun = FALSE;
  97. }
  98.  
  99. break;
  100. }
  101. }
  102. }
  103.  
  104. return 0;
  105. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement