#include "StdAfx.h" #include "ServiceUnits.h" #include "ControlPacket.h" ////////////////////////////////////////////////////////////////////////////////// //静态变量 CServiceUnits * CServiceUnits::g_pServiceUnits = NULL; //对象指针 //构造函数 CServiceUnits::CServiceUnits() { //设置接口 m_pIServiceUnitsSink=NULL; //设置变量 m_ServiceStatus=ServiceStatus_Stop; //设置对象 ASSERT(g_pServiceUnits == NULL); if (g_pServiceUnits == NULL) g_pServiceUnits = this; 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(); return true; } //设置接口 bool CServiceUnits::SetServiceUnitsSink(IServiceUnitsSink * pIServiceUnitsSink) { //设置变量 m_pIServiceUnitsSink=pIServiceUnitsSink; return true; } //服务器维护 bool CServiceUnits::MaintainService(BYTE cbFlag) { BYTE cbTempFlag = cbFlag; //通知服务器维护 SendControlPacket(CT_MAINTAIN_SERVICE, &cbTempFlag, sizeof(BYTE)); return true; } //发送系统消息 bool CServiceUnits::SendSystemMessage(CMD_CM_SystemMessage* pMsg) { SendControlPacket(CT_SEND_SYSTEM_MESSAGE, pMsg, sizeof(CMD_CM_SystemMessage)); 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,NULL)==false) return false; 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; } //发送控制 bool CServiceUnits::SendControlPacket(WORD wControlID, VOID * pData, WORD wDataSize) { //状态效验 ASSERT(m_AttemperEngine.GetInterface() != NULL); if (m_AttemperEngine.GetInterface() == NULL) return false; //发送控制 m_AttemperEngine->OnEventControl(wControlID, pData, wDataSize); return true; } //////////////////////////////////////////////////////////////////////////////////