|
- #include "StdAfx.h"
- #include "ServiceUnits.h"
- #include "ControlPacket.h"
-
- //////////////////////////////////////////////////////////////////////////////////
-
- //构造函数
- CServiceUnits::CServiceUnits()
- {
- //设置接口
- m_pIServiceUnitsSink = NULL;
-
- //设置变量
- m_ServiceStatus = ServiceStatus_Stop;
-
- return;
- }
-
- //析构函数
- CServiceUnits::~CServiceUnits()
- {
- ConcludeService();
- }
-
- //启动服务
- bool CServiceUnits::StartService()
- {
- //效验状态
- ASSERT(m_ServiceStatus == ServiceStatus_Stop);
- if (m_ServiceStatus != ServiceStatus_Stop) return false;
-
- //设置状态
- SetServiceStatus(ServiceStatus_Config);
-
- //配置服务
- if (InitializeService() == false)
- {
- ConcludeService();
- return false;
- }
-
- //启动内核
- if (StartKernelService() == false)
- {
- ConcludeService();
- return false;
- }
-
- //设置状态
- SetServiceStatus(ServiceStatus_Service);
-
- return true;
- }
-
- //停止服务
- bool CServiceUnits::ConcludeService()
- {
- //设置变量
- SetServiceStatus(ServiceStatus_Stop);
-
- //停止服务
- if (m_TimerEngine.GetInterface() != NULL) m_TimerEngine->ConcludeService();
- if (m_AttemperEngine.GetInterface() != NULL) m_AttemperEngine->ConcludeService();
- if (m_TCPNetworkEngine.GetInterface() != NULL) m_TCPNetworkEngine->ConcludeService();
- m_RedisClient->DisConnect();
- return true;
- }
-
- //设置接口
- bool CServiceUnits::SetServiceUnitsSink(IServiceUnitsSink * pIServiceUnitsSink)
- {
- //设置变量
- m_pIServiceUnitsSink = pIServiceUnitsSink;
-
- return true;
- }
-
- //配置组件
- bool CServiceUnits::InitializeService()
- {
- //加载参数
- m_InitParameter.LoadInitParameter();
-
- //创建组件
- if ((m_TimerEngine.GetInterface() == NULL) && (m_TimerEngine.CreateInstance() == false)) return false;
- if ((m_AttemperEngine.GetInterface() == NULL) && (m_AttemperEngine.CreateInstance() == false)) return false;
- if ((m_TCPNetworkEngine.GetInterface() == NULL) && (m_TCPNetworkEngine.CreateInstance() == false)) return false;
-
- //组件接口
- IUnknownEx * pIAttemperEngine = m_AttemperEngine.GetInterface();
- IUnknownEx * pITCPNetworkEngine = m_TCPNetworkEngine.GetInterface();
-
- //回调接口
- IUnknownEx * pIAttemperEngineSink = QUERY_OBJECT_INTERFACE(m_AttemperEngineSink, IUnknownEx);
-
- //绑定接口
- if (m_AttemperEngine->SetAttemperEngineSink(pIAttemperEngineSink) == false) return false;
-
- //内核组件
- if (m_TimerEngine->SetTimerEngineEvent(pIAttemperEngine) == false) return false;
- if (m_AttemperEngine->SetNetworkEngine(pITCPNetworkEngine) == false) return false;
- if (m_TCPNetworkEngine->SetTCPNetworkEngineEvent(pIAttemperEngine) == false) return false;
-
- //调度回调
- m_AttemperEngineSink.m_pInitParameter = &m_InitParameter;
- m_AttemperEngineSink.m_pITimerEngine = m_TimerEngine.GetInterface();
- m_AttemperEngineSink.m_pITCPNetworkEngine = m_TCPNetworkEngine.GetInterface();
-
- //配置网络
- WORD wMaxConnect = m_InitParameter.m_wMaxConnect;
- WORD wServicePort = m_InitParameter.m_wServicePort;
- if (m_TCPNetworkEngine->SetServiceParameter(wServicePort, wMaxConnect, szCompilation) == false) return false;
-
- //连接redis
- m_RedisClient = std::make_shared<RedisBase>();
- 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);
- m_AttemperEngineSink.m_RedisClient = m_RedisClient;
- m_RedisClient->GetRedisClient()->set("hello", "42");
- m_RedisClient->GetRedisClient()->sync_commit();
- return true;
- }
-
- //启动内核
- bool CServiceUnits::StartKernelService()
- {
- //时间引擎
- if (m_TimerEngine->StartService() == false)
- {
- ASSERT(FALSE);
- return false;
- }
-
- //调度引擎
- if (m_AttemperEngine->StartService() == false)
- {
- ASSERT(FALSE);
- return false;
- }
-
- //网络引擎
- if (m_TCPNetworkEngine->StartService() == false)
- {
- ASSERT(FALSE);
- return false;
- }
-
- return true;
- }
-
- //设置状态
- bool CServiceUnits::SetServiceStatus(enServiceStatus ServiceStatus)
- {
- //状态判断
- if (m_ServiceStatus != ServiceStatus)
- {
- //错误通知
- if ((m_ServiceStatus != ServiceStatus_Service) && (ServiceStatus == ServiceStatus_Stop))
- {
- LPCTSTR pszString = TEXT("服务启动失败");
- CTraceService::TraceString(pszString, TraceLevel_Exception);
- }
-
- //设置变量
- m_ServiceStatus = ServiceStatus;
-
- //状态通知
- ASSERT(m_pIServiceUnitsSink != NULL);
- if (m_pIServiceUnitsSink != NULL) m_pIServiceUnitsSink->OnServiceUnitsStatus(m_ServiceStatus);
- }
-
- return true;
- }
-
- //////////////////////////////////////////////////////////////////////////////////
|