SockThread.cpp
上传用户:dzyhzl
上传日期:2019-04-29
资源大小:56270k
文件大小:3k
源码类别:

模拟服务器

开发平台:

C/C++

  1. // SockThread.cpp: implementation of the CSockThread class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4. #include "stdafx.h"
  5. #include "SockThread.h"
  6. #include "S3Relay.h"
  7. #include "Global.h"
  8. //////////////////////////////////////////////////////////////////////
  9. // Construction/Destruction
  10. //////////////////////////////////////////////////////////////////////
  11. CSockThread::CSockThread()
  12. : m_step(step_NONE), m_cntLoop(0), m_tickLoop(0)
  13. {
  14. }
  15. CSockThread::~CSockThread()
  16. {
  17. }
  18. DWORD CSockThread::Main(LPVOID lpParam)
  19. {
  20. try
  21. {
  22. DEBUGDO( m_step = step_NONE );
  23. DEBUGDO( m_tickLoop = 0 );
  24. DEBUGDO( m_cntLoop = 0 );
  25. DEBUGDO( m_step = step_EnterLoop);
  26. EnterLoop();
  27. while (!IsAskingStop())
  28. {
  29. DEBUGDO( m_tickLoop = ::GetTickCount() );
  30. DEBUGDO( ++ m_cntLoop );
  31. DEBUGDO( m_step = step_PrepareSock);
  32. PrepareSock();
  33. DEBUGDO( m_step = step_RelayCenter);
  34. g_RelayCenter.Route();
  35. DEBUGDO( m_step = step_RelayServer);
  36. g_RelayServer.Route();
  37. DEBUGDO( m_step = step_RootCenter);
  38. g_RootCenter.Route();
  39. DEBUGDO( m_step = step_GatewayCenter);
  40. g_GatewayCenter.Route();
  41. DEBUGDO( m_step = step_HostServer);
  42. g_HostServer.Route();
  43. DEBUGDO( m_step = step_TongServer);
  44. g_TongServer.Route();
  45. DEBUGDO( m_step = step_ChatServer);
  46. g_ChatServer.Route();
  47. DEBUGDO( m_step = step_UnprepareSock);
  48. UnprepareSock();
  49. DEBUGDO( m_step = step_Sleep);
  50. ::Sleep(breathe_interval);
  51. }
  52. DEBUGDO( m_step = step_LeaveLoop);
  53. LeaveLoop();
  54. }
  55. catch (...)
  56. {
  57. rTRACE("fatal: sock thread except");
  58. }
  59. return 0;
  60. }
  61. HANDLE CSockThread::Start()
  62. {
  63. if (m_hProcessor != NULL)
  64. return m_hProcessor;
  65. m_step = step_NONE;
  66. m_cntLoop = 0;
  67. m_tickLoop = 0;
  68. HANDLE reth = KThread::Start();
  69. if (!reth)
  70. {
  71. rTRACE("FAIL: SockThread start");
  72. return NULL;
  73. }
  74. rTRACE("SockThread start success");
  75. return reth;
  76. }
  77. BOOL CSockThread::Stop()
  78. {
  79. if (!m_hProcessor)
  80. return TRUE;
  81. if (!KThread::Stop())
  82. {
  83. rTRACE("FAIL: SockThread stop");
  84. return FALSE;
  85. }
  86. m_step = step_NONE;
  87. m_cntLoop = 0;
  88. m_tickLoop = 0;
  89. rTRACE("SockThread stop success");
  90. return TRUE;
  91. }
  92. BOOL CSockThread::TraceInfo()
  93. {
  94. static const char* stepdesc[] = {
  95. "NONE",
  96. "EnterLoop",
  97. "PrepareSock",
  98. "RelayCenter", 
  99. "RelayServer",
  100. "RootCenter",
  101. "GatewayCenter",
  102. "HostServer",
  103. "TongServer",
  104. "ChatServer",
  105. "UnprepareSock",
  106. "LeaveLoop",
  107. "Sleep",
  108. };
  109. rTRACE("message: [SockThread] tickLoop: %d, cntLoop: %d, step: %s", m_tickLoop, m_cntLoop, stepdesc[m_step]);
  110. return TRUE;
  111. }