205 lines
4.6 KiB
C++
205 lines
4.6 KiB
C++
#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;
|
|
}
|
|
//////////////////////////////////////////////////////////////////////////////////
|