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

178 lines
5.0 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. Logger::GetInstance().InitDefaultLog("CorrespondServer", "daily_log.log");
  23. LTrace("{}", 45);
  24. //效验状态
  25. ASSERT(m_ServiceStatus == ServiceStatus_Stop);
  26. if (m_ServiceStatus != ServiceStatus_Stop) return false;
  27. //设置状态
  28. SetServiceStatus(ServiceStatus_Config);
  29. //配置服务
  30. if (InitializeService() == false)
  31. {
  32. ConcludeService();
  33. return false;
  34. }
  35. //启动内核
  36. if (StartKernelService() == false)
  37. {
  38. ConcludeService();
  39. return false;
  40. }
  41. //设置状态
  42. SetServiceStatus(ServiceStatus_Service);
  43. return true;
  44. }
  45. //停止服务
  46. bool CServiceUnits::ConcludeService()
  47. {
  48. //设置变量
  49. SetServiceStatus(ServiceStatus_Stop);
  50. //停止服务
  51. if (m_TimerEngine.GetInterface() != NULL) m_TimerEngine->ConcludeService();
  52. if (m_AttemperEngine.GetInterface() != NULL) m_AttemperEngine->ConcludeService();
  53. if (m_TCPNetworkEngine.GetInterface() != NULL) m_TCPNetworkEngine->ConcludeService();
  54. m_RedisClient->DisConnect();
  55. Logger::ShutDown();
  56. return true;
  57. }
  58. //设置接口
  59. bool CServiceUnits::SetServiceUnitsSink(IServiceUnitsSink * pIServiceUnitsSink)
  60. {
  61. //设置变量
  62. m_pIServiceUnitsSink = pIServiceUnitsSink;
  63. return true;
  64. }
  65. //配置组件
  66. bool CServiceUnits::InitializeService()
  67. {
  68. //加载参数
  69. m_InitParameter.LoadInitParameter();
  70. //创建组件
  71. if ((m_TimerEngine.GetInterface() == NULL) && (m_TimerEngine.CreateInstance() == false)) return false;
  72. if ((m_AttemperEngine.GetInterface() == NULL) && (m_AttemperEngine.CreateInstance() == false)) return false;
  73. if ((m_TCPNetworkEngine.GetInterface() == NULL) && (m_TCPNetworkEngine.CreateInstance() == false)) return false;
  74. //组件接口
  75. IUnknownEx * pIAttemperEngine = m_AttemperEngine.GetInterface();
  76. IUnknownEx * pITCPNetworkEngine = m_TCPNetworkEngine.GetInterface();
  77. //回调接口
  78. IUnknownEx * pIAttemperEngineSink = QUERY_OBJECT_INTERFACE(m_AttemperEngineSink, IUnknownEx);
  79. //绑定接口
  80. if (m_AttemperEngine->SetAttemperEngineSink(pIAttemperEngineSink) == false) return false;
  81. //内核组件
  82. if (m_TimerEngine->SetTimerEngineEvent(pIAttemperEngine) == false) return false;
  83. if (m_AttemperEngine->SetNetworkEngine(pITCPNetworkEngine) == false) return false;
  84. if (m_TCPNetworkEngine->SetTCPNetworkEngineEvent(pIAttemperEngine) == false) return false;
  85. //调度回调
  86. m_AttemperEngineSink.m_pInitParameter = &m_InitParameter;
  87. m_AttemperEngineSink.m_pITimerEngine = m_TimerEngine.GetInterface();
  88. m_AttemperEngineSink.m_pITCPNetworkEngine = m_TCPNetworkEngine.GetInterface();
  89. //配置网络
  90. WORD wMaxConnect = m_InitParameter.m_wMaxConnect;
  91. WORD wServicePort = m_InitParameter.m_wServicePort;
  92. if (m_TCPNetworkEngine->SetServiceParameter(wServicePort, wMaxConnect, szCompilation) == false) return false;
  93. //连接redis
  94. m_RedisClient = std::make_shared<RedisBase>();
  95. 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);
  96. m_AttemperEngineSink.m_RedisClient = m_RedisClient;
  97. m_RedisClient->GetRedisClient()->set("hello", "42");
  98. m_RedisClient->GetRedisClient()->sync_commit();
  99. return true;
  100. }
  101. //启动内核
  102. bool CServiceUnits::StartKernelService()
  103. {
  104. //时间引擎
  105. if (m_TimerEngine->StartService() == false)
  106. {
  107. ASSERT(FALSE);
  108. return false;
  109. }
  110. //调度引擎
  111. if (m_AttemperEngine->StartService() == false)
  112. {
  113. ASSERT(FALSE);
  114. return false;
  115. }
  116. //网络引擎
  117. if (m_TCPNetworkEngine->StartService() == false)
  118. {
  119. ASSERT(FALSE);
  120. return false;
  121. }
  122. return true;
  123. }
  124. //设置状态
  125. bool CServiceUnits::SetServiceStatus(enServiceStatus ServiceStatus)
  126. {
  127. //状态判断
  128. if (m_ServiceStatus != ServiceStatus)
  129. {
  130. //错误通知
  131. if ((m_ServiceStatus != ServiceStatus_Service) && (ServiceStatus == ServiceStatus_Stop))
  132. {
  133. LPCTSTR pszString = TEXT("服务启动失败");
  134. CTraceService::TraceString(pszString, TraceLevel_Exception);
  135. }
  136. //设置变量
  137. m_ServiceStatus = ServiceStatus;
  138. //状态通知
  139. ASSERT(m_pIServiceUnitsSink != NULL);
  140. if (m_pIServiceUnitsSink != NULL) m_pIServiceUnitsSink->OnServiceUnitsStatus(m_ServiceStatus);
  141. }
  142. return true;
  143. }
  144. //////////////////////////////////////////////////////////////////////////////////