诸暨麻将添加redis
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

170 lines
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. //
  90. return true;
  91. }
  92. //启动内核
  93. bool CServiceUnits::StartKernelService()
  94. {
  95. //时间引擎
  96. if (m_TimerEngine->StartService() == false)
  97. {
  98. ASSERT(FALSE);
  99. return false;
  100. }
  101. //调度引擎
  102. if (m_AttemperEngine->StartService() == false)
  103. {
  104. ASSERT(FALSE);
  105. return false;
  106. }
  107. //网络引擎
  108. if (m_TCPNetworkEngine->StartService() == false)
  109. {
  110. ASSERT(FALSE);
  111. return false;
  112. }
  113. return true;
  114. }
  115. //设置状态
  116. bool CServiceUnits::SetServiceStatus(enServiceStatus ServiceStatus)
  117. {
  118. //状态判断
  119. if (m_ServiceStatus != ServiceStatus)
  120. {
  121. //错误通知
  122. if ((m_ServiceStatus != ServiceStatus_Service) && (ServiceStatus == ServiceStatus_Stop))
  123. {
  124. LPCTSTR pszString = TEXT("服务启动失败");
  125. CTraceService::TraceString(pszString, TraceLevel_Exception);
  126. }
  127. //设置变量
  128. m_ServiceStatus = ServiceStatus;
  129. //状态通知
  130. ASSERT(m_pIServiceUnitsSink != NULL);
  131. if (m_pIServiceUnitsSink != NULL) m_pIServiceUnitsSink->OnServiceUnitsStatus(m_ServiceStatus);
  132. }
  133. return true;
  134. }
  135. //////////////////////////////////////////////////////////////////////////////////