//启动服务 bool CServiceUnits::StartService() { //效验状态 ASSERT(m_ServiceStatus==ServiceStatus_Stop); if (m_ServiceStatus!=ServiceStatus_Stop) return false; //设置状态 SetServiceStatus(ServiceStatus_Config); //创建窗口 if (m_hWnd==NULL) { CRect rcCreate(0,0,0,0); Create(NULL,NULL,WS_CHILD,rcCreate,AfxGetMainWnd(),100); } //创建模块 if (CreateServiceDLL()==false) { ConcludeService(); return false; } //调整参数 if (RectifyServiceParameter()==false) { ConcludeService(); return false; } //配置服务 if (InitializeService()==false) { ConcludeService(); return false; } //启动内核 if (StartKernelService()==false) { ConcludeService(); return false; } //加载配置 SendControlPacket(CT_LOAD_SERVICE_CONFIG,NULL,0); //启动比赛 if (m_GameMatchServiceManager.GetInterface()!=NULL && m_GameMatchServiceManager->StartService()==false) return false; return true; }
//析构函数 CTimerEngine::~CTimerEngine(void) { INT_PTR i = 0; //停止服务 ConcludeService(); //清理内存 tagTimerItem * pTimerItem = NULL; for (i = 0; i < m_TimerItemFree.GetCount(); i++) { pTimerItem = m_TimerItemFree[i]; ASSERT(pTimerItem != NULL); SafeDelete(pTimerItem); } for (i = 0; i < m_TimerItemActive.GetCount(); i++) { pTimerItem = m_TimerItemActive[i]; ASSERT(pTimerItem != NULL); SafeDelete(pTimerItem); } m_TimerItemFree.RemoveAll(); m_TimerItemActive.RemoveAll(); return; }
//析构函数 CQueueService::~CQueueService(void) { //停止服务 ConcludeService(); return; }
//析构函数 CTCPNetworkEngine::~CTCPNetworkEngine(void) { //停止服务 ConcludeService(); //释放存储连接 CServerSocketItem * pSocketItem = NULL; for (INT_PTR i = 0; i < m_StorageSocketItem.GetCount(); i++) { pSocketItem = m_StorageSocketItem[i]; ASSERT(pSocketItem != NULL); SafeDelete(pSocketItem); } m_StorageSocketItem.RemoveAll(); return; }
//析构函数 CTCPSocketService::~CTCPSocketService(void) { if (m_bService) ConcludeService(); }
//控制消息 LRESULT CServiceUnits::OnUIControlRequest(WPARAM wParam, LPARAM lParam) { //变量定义 tagDataHead DataHead; BYTE cbBuffer[MAX_ASYNCHRONISM_DATA]; //提取数据 CWHDataLocker DataLocker(m_CriticalSection); if (m_DataQueue.DistillData(DataHead,cbBuffer,sizeof(cbBuffer))==false) { ASSERT(FALSE); return NULL; } //数据处理 switch (DataHead.wIdentifier) { case UI_CORRESPOND_RESULT: //协调成功 { //效验消息 ASSERT(DataHead.wDataSize==sizeof(CP_ControlResult)); if (DataHead.wDataSize!=sizeof(CP_ControlResult)) return 0; //变量定义 CP_ControlResult * pControlResult=(CP_ControlResult *)cbBuffer; //失败处理 if ((m_ServiceStatus!=ServiceStatus_Service)&&(pControlResult->cbSuccess==ER_FAILURE)) { ConcludeService(); return 0; } //成功处理 if ((m_ServiceStatus!=ServiceStatus_Service)&&(pControlResult->cbSuccess==ER_SUCCESS)) { //设置状态 SetServiceStatus(ServiceStatus_Service); } return 0; } case UI_SERVICE_CONFIG_RESULT: //配置结果 { //效验消息 ASSERT(DataHead.wDataSize==sizeof(CP_ControlResult)); if (DataHead.wDataSize!=sizeof(CP_ControlResult)) return 0; //变量定义 CP_ControlResult * pControlResult=(CP_ControlResult *)cbBuffer; //失败处理 if ((m_ServiceStatus!=ServiceStatus_Service)&&(pControlResult->cbSuccess==ER_FAILURE)) { ConcludeService(); return 0; } //成功处理 if ((m_ServiceStatus!=ServiceStatus_Service)&&(pControlResult->cbSuccess==ER_SUCCESS)) { //启动网络 if (StartNetworkService()==false) { ConcludeService(); return 0; } //连接协调 SendControlPacket(CT_CONNECT_CORRESPOND,NULL,0); } return 0; } } return 0; }