诸暨麻将添加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.
 
 
 
 
 
 

173 lines
4.8 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. m_RedisClient->DisConnect();
  53. return true;
  54. }
  55. //设置接口
  56. bool CServiceUnits::SetServiceUnitsSink(IServiceUnitsSink * pIServiceUnitsSink)
  57. {
  58. //设置变量
  59. m_pIServiceUnitsSink = pIServiceUnitsSink;
  60. return true;
  61. }
  62. //配置组件
  63. bool CServiceUnits::InitializeService()
  64. {
  65. //加载参数
  66. m_InitParameter.LoadInitParameter();
  67. //创建组件
  68. if ((m_TimerEngine.GetInterface() == NULL) && (m_TimerEngine.CreateInstance() == false)) return false;
  69. if ((m_AttemperEngine.GetInterface() == NULL) && (m_AttemperEngine.CreateInstance() == false)) return false;
  70. if ((m_TCPNetworkEngine.GetInterface() == NULL) && (m_TCPNetworkEngine.CreateInstance() == false)) return false;
  71. //组件接口
  72. IUnknownEx * pIAttemperEngine = m_AttemperEngine.GetInterface();
  73. IUnknownEx * pITCPNetworkEngine = m_TCPNetworkEngine.GetInterface();
  74. //回调接口
  75. IUnknownEx * pIAttemperEngineSink = QUERY_OBJECT_INTERFACE(m_AttemperEngineSink, IUnknownEx);
  76. //绑定接口
  77. if (m_AttemperEngine->SetAttemperEngineSink(pIAttemperEngineSink) == false) return false;
  78. //内核组件
  79. if (m_TimerEngine->SetTimerEngineEvent(pIAttemperEngine) == false) return false;
  80. if (m_AttemperEngine->SetNetworkEngine(pITCPNetworkEngine) == false) return false;
  81. if (m_TCPNetworkEngine->SetTCPNetworkEngineEvent(pIAttemperEngine) == false) return false;
  82. //调度回调
  83. m_AttemperEngineSink.m_pInitParameter = &m_InitParameter;
  84. m_AttemperEngineSink.m_pITimerEngine = m_TimerEngine.GetInterface();
  85. m_AttemperEngineSink.m_pITCPNetworkEngine = m_TCPNetworkEngine.GetInterface();
  86. //配置网络
  87. WORD wMaxConnect = m_InitParameter.m_wMaxConnect;
  88. WORD wServicePort = m_InitParameter.m_wServicePort;
  89. if (m_TCPNetworkEngine->SetServiceParameter(wServicePort, wMaxConnect, szCompilation) == false) return false;
  90. //连接redis
  91. m_RedisClient = std::make_shared<RedisBase>();
  92. m_RedisClient->Connect(m_InitParameter.m_RedisHost, m_InitParameter.m_RedisPort, m_InitParameter.m_RedisDb, m_InitParameter.m_RedisTimeOut, m_InitParameter.m_RedisMaxReconnect, m_InitParameter.m_RedisReconnectInterval);
  93. m_AttemperEngineSink.m_RedisClient = m_RedisClient;
  94. return true;
  95. }
  96. //启动内核
  97. bool CServiceUnits::StartKernelService()
  98. {
  99. //时间引擎
  100. if (m_TimerEngine->StartService() == false)
  101. {
  102. ASSERT(FALSE);
  103. return false;
  104. }
  105. //调度引擎
  106. if (m_AttemperEngine->StartService() == false)
  107. {
  108. ASSERT(FALSE);
  109. return false;
  110. }
  111. //网络引擎
  112. if (m_TCPNetworkEngine->StartService() == false)
  113. {
  114. ASSERT(FALSE);
  115. return false;
  116. }
  117. return true;
  118. }
  119. //设置状态
  120. bool CServiceUnits::SetServiceStatus(enServiceStatus ServiceStatus)
  121. {
  122. //状态判断
  123. if (m_ServiceStatus != ServiceStatus)
  124. {
  125. //错误通知
  126. if ((m_ServiceStatus != ServiceStatus_Service) && (ServiceStatus == ServiceStatus_Stop))
  127. {
  128. LPCTSTR pszString = TEXT("服务启动失败");
  129. CTraceService::TraceString(pszString, TraceLevel_Exception);
  130. }
  131. //设置变量
  132. m_ServiceStatus = ServiceStatus;
  133. //状态通知
  134. ASSERT(m_pIServiceUnitsSink != NULL);
  135. if (m_pIServiceUnitsSink != NULL) m_pIServiceUnitsSink->OnServiceUnitsStatus(m_ServiceStatus);
  136. }
  137. return true;
  138. }
  139. //////////////////////////////////////////////////////////////////////////////////