诸暨麻将添加redis
Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.
 
 
 
 
 
 

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