#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(); 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; } //////////////////////////////////////////////////////////////////////////////////