诸暨麻将添加redis
選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。
 
 
 
 
 
 

169 行
4.4 KiB

  1. #include "StdAfx.h"
  2. #include "ServiceUnits.h"
  3. #include "ControlPacket.h"
  4. //////////////////////////////////////////////////////////////////////////////////
  5. //构造函数
  6. CServiceUnits::CServiceUnits()
  7. {
  8. //设置接口
  9. m_pIServiceUnitsSink = NULL;
  10. //设置变量
  11. m_ServiceStatus = ServiceStatus_Stop;
  12. return;
  13. }
  14. //析构函数
  15. CServiceUnits::~CServiceUnits()
  16. {
  17. ConcludeService();
  18. }
  19. //启动服务
  20. bool CServiceUnits::StartService()
  21. {
  22. //效验状态
  23. ASSERT(m_ServiceStatus == ServiceStatus_Stop);
  24. if (m_ServiceStatus != ServiceStatus_Stop) return false;
  25. //设置状态
  26. SetServiceStatus(ServiceStatus_Config);
  27. //配置服务
  28. if (InitializeService() == false)
  29. {
  30. ConcludeService();
  31. return false;
  32. }
  33. //启动内核
  34. if (StartKernelService() == false)
  35. {
  36. ConcludeService();
  37. return false;
  38. }
  39. //设置状态
  40. SetServiceStatus(ServiceStatus_Service);
  41. return true;
  42. }
  43. //停止服务
  44. bool CServiceUnits::ConcludeService()
  45. {
  46. //设置变量
  47. SetServiceStatus(ServiceStatus_Stop);
  48. //停止服务
  49. if (m_TimerEngine.GetInterface() != NULL) m_TimerEngine->ConcludeService();
  50. if (m_AttemperEngine.GetInterface() != NULL) m_AttemperEngine->ConcludeService();
  51. if (m_TCPNetworkEngine.GetInterface() != NULL) m_TCPNetworkEngine->ConcludeService();
  52. return true;
  53. }
  54. //设置接口
  55. bool CServiceUnits::SetServiceUnitsSink(IServiceUnitsSink * pIServiceUnitsSink)
  56. {
  57. //设置变量
  58. m_pIServiceUnitsSink = pIServiceUnitsSink;
  59. return true;
  60. }
  61. //配置组件
  62. bool CServiceUnits::InitializeService()
  63. {
  64. //加载参数
  65. m_InitParameter.LoadInitParameter();
  66. //创建组件
  67. if ((m_TimerEngine.GetInterface() == NULL) && (m_TimerEngine.CreateInstance() == false)) return false;
  68. if ((m_AttemperEngine.GetInterface() == NULL) && (m_AttemperEngine.CreateInstance() == false)) return false;
  69. if ((m_TCPNetworkEngine.GetInterface() == NULL) && (m_TCPNetworkEngine.CreateInstance() == false)) return false;
  70. //组件接口
  71. IUnknownEx * pIAttemperEngine = m_AttemperEngine.GetInterface();
  72. IUnknownEx * pITCPNetworkEngine = m_TCPNetworkEngine.GetInterface();
  73. //回调接口
  74. IUnknownEx * pIAttemperEngineSink = QUERY_OBJECT_INTERFACE(m_AttemperEngineSink, IUnknownEx);
  75. //绑定接口
  76. if (m_AttemperEngine->SetAttemperEngineSink(pIAttemperEngineSink) == false) return false;
  77. //内核组件
  78. if (m_TimerEngine->SetTimerEngineEvent(pIAttemperEngine) == false) return false;
  79. if (m_AttemperEngine->SetNetworkEngine(pITCPNetworkEngine) == false) return false;
  80. if (m_TCPNetworkEngine->SetTCPNetworkEngineEvent(pIAttemperEngine) == false) return false;
  81. //调度回调
  82. m_AttemperEngineSink.m_pInitParameter = &m_InitParameter;
  83. m_AttemperEngineSink.m_pITimerEngine = m_TimerEngine.GetInterface();
  84. m_AttemperEngineSink.m_pITCPNetworkEngine = m_TCPNetworkEngine.GetInterface();
  85. //配置网络
  86. WORD wMaxConnect = m_InitParameter.m_wMaxConnect;
  87. WORD wServicePort = m_InitParameter.m_wServicePort;
  88. if (m_TCPNetworkEngine->SetServiceParameter(wServicePort, wMaxConnect, szCompilation) == false) return false;
  89. return true;
  90. }
  91. //启动内核
  92. bool CServiceUnits::StartKernelService()
  93. {
  94. //时间引擎
  95. if (m_TimerEngine->StartService() == false)
  96. {
  97. ASSERT(FALSE);
  98. return false;
  99. }
  100. //调度引擎
  101. if (m_AttemperEngine->StartService() == false)
  102. {
  103. ASSERT(FALSE);
  104. return false;
  105. }
  106. //网络引擎
  107. if (m_TCPNetworkEngine->StartService() == false)
  108. {
  109. ASSERT(FALSE);
  110. return false;
  111. }
  112. return true;
  113. }
  114. //设置状态
  115. bool CServiceUnits::SetServiceStatus(enServiceStatus ServiceStatus)
  116. {
  117. //状态判断
  118. if (m_ServiceStatus != ServiceStatus)
  119. {
  120. //错误通知
  121. if ((m_ServiceStatus != ServiceStatus_Service) && (ServiceStatus == ServiceStatus_Stop))
  122. {
  123. LPCTSTR pszString = TEXT("服务启动失败");
  124. CTraceService::TraceString(pszString, TraceLevel_Exception);
  125. }
  126. //设置变量
  127. m_ServiceStatus = ServiceStatus;
  128. //状态通知
  129. ASSERT(m_pIServiceUnitsSink != NULL);
  130. if (m_pIServiceUnitsSink != NULL) m_pIServiceUnitsSink->OnServiceUnitsStatus(m_ServiceStatus);
  131. }
  132. return true;
  133. }
  134. //////////////////////////////////////////////////////////////////////////////////