808 lines
22 KiB
C++
808 lines
22 KiB
C++
|
|
#include "StdAfx.h"
|
|||
|
|
#include "ServiceUnits.h"
|
|||
|
|
#include "ControlPacket.h"
|
|||
|
|
|
|||
|
|
//////////////////////////////////////////////////////////////////////////////////
|
|||
|
|
|
|||
|
|
//<2F><>̬<EFBFBD><CCAC><EFBFBD><EFBFBD>
|
|||
|
|
CServiceUnits * CServiceUnits::g_pServiceUnits=NULL; //<2F><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
|
|||
|
|
|
|||
|
|
//////////////////////////////////////////////////////////////////////////////////
|
|||
|
|
|
|||
|
|
BEGIN_MESSAGE_MAP(CServiceUnits, CWnd)
|
|||
|
|
ON_MESSAGE(WM_UICONTROL_REQUEST,OnUIControlRequest)
|
|||
|
|
END_MESSAGE_MAP()
|
|||
|
|
|
|||
|
|
//////////////////////////////////////////////////////////////////////////////////
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>캯<EFBFBD><ECBAAF>
|
|||
|
|
CServiceUnits::CServiceUnits()
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
m_ServiceStatus=ServiceStatus_Stop;
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>ýӿ<C3BD>
|
|||
|
|
m_pIServiceUnitsSink=NULL;
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>ö<EFBFBD><C3B6><EFBFBD>
|
|||
|
|
ASSERT(g_pServiceUnits==NULL);
|
|||
|
|
if (g_pServiceUnits==NULL) g_pServiceUnits=this;
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
ZeroMemory(&m_GameParameter,sizeof(m_GameParameter));
|
|||
|
|
ZeroMemory(&m_DataBaseParameter,sizeof(m_DataBaseParameter));
|
|||
|
|
ZeroMemory(&m_GameServiceAttrib,sizeof(m_GameServiceAttrib));
|
|||
|
|
ZeroMemory(&m_GameServiceOption,sizeof(m_GameServiceOption));
|
|||
|
|
ZeroMemory(&m_GameMatchOption,sizeof(m_GameMatchOption));
|
|||
|
|
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
CServiceUnits::~CServiceUnits()
|
|||
|
|
{
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>ýӿ<C3BD>
|
|||
|
|
bool CServiceUnits::SetServiceUnitsSink(IServiceUnitsSink * pIServiceUnitsSink)
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>
|
|||
|
|
m_pIServiceUnitsSink=pIServiceUnitsSink;
|
|||
|
|
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//Ͷ<><CDB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
bool CServiceUnits::PostControlRequest(WORD wIdentifier, VOID * pData, WORD wDataSize)
|
|||
|
|
{
|
|||
|
|
//״̬<D7B4>ж<EFBFBD>
|
|||
|
|
ASSERT(IsWindow(m_hWnd));
|
|||
|
|
if (IsWindow(m_hWnd)==FALSE) return false;
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
CWHDataLocker DataLocker(m_CriticalSection);
|
|||
|
|
if (m_DataQueue.InsertData(wIdentifier,pData,wDataSize)==false) return false;
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
|||
|
|
PostMessage(WM_UICONTROL_REQUEST,wIdentifier,wDataSize);
|
|||
|
|
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
bool CServiceUnits::StartService()
|
|||
|
|
{
|
|||
|
|
//Ч<><D0A7>״̬
|
|||
|
|
ASSERT(m_ServiceStatus==ServiceStatus_Stop);
|
|||
|
|
if (m_ServiceStatus!=ServiceStatus_Stop) return false;
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD>״̬
|
|||
|
|
SetServiceStatus(ServiceStatus_Config);
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
if (m_hWnd==NULL)
|
|||
|
|
{
|
|||
|
|
CRect rcCreate(0,0,0,0);
|
|||
|
|
Create(NULL,NULL,WS_CHILD,rcCreate,AfxGetMainWnd(),100);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3>
|
|||
|
|
if (CreateServiceDLL()==false)
|
|||
|
|
{
|
|||
|
|
ConcludeService();
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
if (RectifyServiceParameter()==false)
|
|||
|
|
{
|
|||
|
|
ConcludeService();
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>÷<EFBFBD><C3B7><EFBFBD>
|
|||
|
|
if (InitializeService()==false)
|
|||
|
|
{
|
|||
|
|
ConcludeService();
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ں<EFBFBD>
|
|||
|
|
if (StartKernelService()==false)
|
|||
|
|
{
|
|||
|
|
ConcludeService();
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
SendControlPacket(CT_LOAD_SERVICE_CONFIG,NULL,0);
|
|||
|
|
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD>
|
|||
|
|
bool CServiceUnits::ConcludeService()
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>
|
|||
|
|
SetServiceStatus(ServiceStatus_Stop);
|
|||
|
|
|
|||
|
|
//<2F>ں<EFBFBD><DABA><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
if (m_TimerEngine.GetInterface()!=NULL) m_TimerEngine->ConcludeService();
|
|||
|
|
if (m_AttemperEngine.GetInterface()!=NULL) m_AttemperEngine->ConcludeService();
|
|||
|
|
if (m_TCPSocketService.GetInterface()!=NULL) m_TCPSocketService->ConcludeService();
|
|||
|
|
if (m_TCPNetworkEngine.GetInterface()!=NULL) m_TCPNetworkEngine->ConcludeService();
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
if (m_RecordDataBaseEngine.GetInterface()!=NULL) m_RecordDataBaseEngine->ConcludeService();
|
|||
|
|
if (m_KernelDataBaseEngine.GetInterface()!=NULL) m_KernelDataBaseEngine->ConcludeService();
|
|||
|
|
m_DBCorrespondManager.ConcludeService();
|
|||
|
|
|
|||
|
|
//ע<><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
if (m_GameServiceManager.GetInterface()!=NULL) m_GameServiceManager.CloseInstance();
|
|||
|
|
if(m_MatchServiceManager.GetInterface()!=NULL)m_MatchServiceManager.CloseInstance();
|
|||
|
|
if(m_PrivateServiceManager.GetInterface()!=NULL)m_PrivateServiceManager.CloseInstance();
|
|||
|
|
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ά<EFBFBD><CEAC>
|
|||
|
|
bool CServiceUnits::MaintainService(BYTE cbFlag)
|
|||
|
|
{
|
|||
|
|
BYTE cbTempFlag = cbFlag;
|
|||
|
|
//֪ͨ<CDA8><D6AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ά<EFBFBD><CEAC>
|
|||
|
|
SendControlPacket(CT_MAINTAIN_SERVICE, &cbTempFlag, sizeof(BYTE));
|
|||
|
|
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD>ϵͳ<CFB5><CDB3>Ϣ
|
|||
|
|
bool CServiceUnits::SendSystemMessage(CMD_CM_SystemMessage* pMsg)
|
|||
|
|
{
|
|||
|
|
SendControlPacket(CT_SEND_SYSTEM_MESSAGE, pMsg, sizeof(CMD_CM_SystemMessage));
|
|||
|
|
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
bool CServiceUnits::UnlockAllUser()
|
|||
|
|
{
|
|||
|
|
SendControlPacket(CT_UNLOCK_ALL_USER, NULL, 0);
|
|||
|
|
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>°汾
|
|||
|
|
bool CServiceUnits::UpDateVersion()
|
|||
|
|
{
|
|||
|
|
SendControlPacket(CT_UPDATE_VERSION, NULL, 0);
|
|||
|
|
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD>
|
|||
|
|
bool CServiceUnits::CollocateService(LPCTSTR pszGameModule, tagGameServiceOption & GameServiceOption)
|
|||
|
|
{
|
|||
|
|
//Ч<><D0A7>״̬
|
|||
|
|
ASSERT(m_ServiceStatus==ServiceStatus_Stop);
|
|||
|
|
if (m_ServiceStatus!=ServiceStatus_Stop) return false;
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3>
|
|||
|
|
m_GameServiceOption=GameServiceOption;
|
|||
|
|
m_GameServiceManager.SetModuleCreateInfo(pszGameModule,GAME_SERVICE_CREATE_NAME);
|
|||
|
|
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
//<2F><>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD>
|
|||
|
|
bool CServiceUnits::CollocateService(tagGameMatchOption & GameMatchOption)
|
|||
|
|
{
|
|||
|
|
//Ч<><D0A7>״̬
|
|||
|
|
ASSERT(m_ServiceStatus==ServiceStatus_Stop);
|
|||
|
|
if (m_ServiceStatus!=ServiceStatus_Stop) return false;
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>
|
|||
|
|
m_GameMatchOption = GameMatchOption;
|
|||
|
|
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3>
|
|||
|
|
bool CServiceUnits::CreateServiceDLL()
|
|||
|
|
{
|
|||
|
|
//ʱ<><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
if ((m_TimerEngine.GetInterface()==NULL)&&(m_TimerEngine.CreateInstance()==false))
|
|||
|
|
{
|
|||
|
|
CTraceService::TraceString(m_TimerEngine.GetErrorDescribe(),TraceLevel_Exception);
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
if ((m_AttemperEngine.GetInterface()==NULL)&&(m_AttemperEngine.CreateInstance()==false))
|
|||
|
|
{
|
|||
|
|
CTraceService::TraceString(m_AttemperEngine.GetErrorDescribe(),TraceLevel_Exception);
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
if ((m_TCPSocketService.GetInterface()==NULL)&&(m_TCPSocketService.CreateInstance()==false))
|
|||
|
|
{
|
|||
|
|
CTraceService::TraceString(m_TCPSocketService.GetErrorDescribe(),TraceLevel_Exception);
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
if ((m_TCPNetworkEngine.GetInterface()==NULL)&&(m_TCPNetworkEngine.CreateInstance()==false))
|
|||
|
|
{
|
|||
|
|
CTraceService::TraceString(m_TCPNetworkEngine.GetErrorDescribe(),TraceLevel_Exception);
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
if ((m_KernelDataBaseEngine.GetInterface()==NULL)&&(m_KernelDataBaseEngine.CreateInstance()==false))
|
|||
|
|
{
|
|||
|
|
CTraceService::TraceString(m_KernelDataBaseEngine.GetErrorDescribe(),TraceLevel_Exception);
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
if ((m_RecordDataBaseEngine.GetInterface()==NULL)&&(m_RecordDataBaseEngine.CreateInstance()==false))
|
|||
|
|
{
|
|||
|
|
CTraceService::TraceString(m_RecordDataBaseEngine.GetErrorDescribe(),TraceLevel_Exception);
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><>Ϸģ<CFB7><C4A3>
|
|||
|
|
if ((m_GameServiceManager.GetInterface()==NULL)&&(m_GameServiceManager.CreateInstance()==false))
|
|||
|
|
{
|
|||
|
|
CTraceService::TraceString(m_GameServiceManager.GetErrorDescribe(),TraceLevel_Exception);
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3>
|
|||
|
|
if ((m_GameServiceOption.wServerType&GAME_GENRE_MATCH)!=0)
|
|||
|
|
{
|
|||
|
|
if ((m_MatchServiceManager.GetInterface()==NULL)&&(m_MatchServiceManager.CreateInstance()==false))
|
|||
|
|
{
|
|||
|
|
CTraceService::TraceString(m_MatchServiceManager.GetErrorDescribe(),TraceLevel_Exception);
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//˽<>˳<EFBFBD>ģ<EFBFBD><C4A3>
|
|||
|
|
if ((m_GameServiceOption.wServerType&GAME_GENRE_EDUCATE)!=0)
|
|||
|
|
{
|
|||
|
|
if ((m_PrivateServiceManager.GetInterface()==NULL)&&(m_PrivateServiceManager.CreateInstance()==false))
|
|||
|
|
{
|
|||
|
|
CTraceService::TraceString(m_PrivateServiceManager.GetErrorDescribe(),TraceLevel_Exception);
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
bool CServiceUnits::InitializeService()
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD>
|
|||
|
|
m_InitParameter.LoadInitParameter();
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>ò<EFBFBD><C3B2><EFBFBD>
|
|||
|
|
m_GameParameter.wMedalRate=1L;
|
|||
|
|
m_GameParameter.wRevenueRate=1L;
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
|||
|
|
LPCTSTR pszDataBaseAddr=m_GameServiceOption.szDataBaseAddr;
|
|||
|
|
LPCTSTR pszDataBaseName=m_GameServiceOption.szDataBaseName;
|
|||
|
|
if (LoadDataBaseParameter(pszDataBaseAddr,pszDataBaseName,m_DataBaseParameter)==false) return false;
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ӿ<EFBFBD>
|
|||
|
|
IUnknownEx * pIAttemperEngine=m_AttemperEngine.GetInterface();
|
|||
|
|
IUnknownEx * pITCPNetworkEngine=m_TCPNetworkEngine.GetInterface();
|
|||
|
|
IUnknownEx * pIAttemperEngineSink=QUERY_OBJECT_INTERFACE(m_AttemperEngineSink,IUnknownEx);
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
IUnknownEx * pIDataBaseEngineRecordSink[CountArray(m_RecordDataBaseSink)];
|
|||
|
|
IUnknownEx * pIDataBaseEngineKernelSink[CountArray(m_KernelDataBaseSink)];
|
|||
|
|
for (WORD i=0;i<CountArray(pIDataBaseEngineRecordSink);i++) pIDataBaseEngineRecordSink[i]=QUERY_OBJECT_INTERFACE(m_RecordDataBaseSink[i],IUnknownEx);
|
|||
|
|
for (WORD i=0;i<CountArray(pIDataBaseEngineKernelSink);i++) pIDataBaseEngineKernelSink[i]=QUERY_OBJECT_INTERFACE(m_KernelDataBaseSink[i],IUnknownEx);
|
|||
|
|
|
|||
|
|
//<2F>ӿ<F3B6A8BD>
|
|||
|
|
if (m_AttemperEngine->SetAttemperEngineSink(pIAttemperEngineSink)==false) return false;
|
|||
|
|
if (m_RecordDataBaseEngine->SetDataBaseEngineSink(pIDataBaseEngineRecordSink,CountArray(pIDataBaseEngineRecordSink))==false) return false;
|
|||
|
|
if (m_KernelDataBaseEngine->SetDataBaseEngineSink(pIDataBaseEngineKernelSink,CountArray(pIDataBaseEngineKernelSink))==false) return false;
|
|||
|
|
|
|||
|
|
//<2F><>ѯ<EFBFBD>ӿ<EFBFBD>
|
|||
|
|
IGameServiceCustomTime * pIGameServiceSustomTime = QUERY_OBJECT_PTR_INTERFACE(m_GameServiceManager.GetInterface(), IGameServiceCustomTime);
|
|||
|
|
|
|||
|
|
//ʱ<><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
if (pIGameServiceSustomTime != NULL)
|
|||
|
|
{
|
|||
|
|
//<2F><>Ԫʱ<D4AA><CAB1>
|
|||
|
|
DWORD dwTimeCell = dwTimeCell = pIGameServiceSustomTime->GetTimerEngineTimeCell();
|
|||
|
|
if (dwTimeCell > TIME_CELL) dwTimeCell = TIME_CELL;
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
|
|||
|
|
m_TimerEngine->SetTimeCell(dwTimeCell);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F>ں<EFBFBD><DABA><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
if (m_TimerEngine->SetTimerEngineEvent(pIAttemperEngine)==false) return false;
|
|||
|
|
if (m_AttemperEngine->SetNetworkEngine(pITCPNetworkEngine)==false) return false;
|
|||
|
|
if (m_TCPNetworkEngine->SetTCPNetworkEngineEvent(pIAttemperEngine)==false) return false;
|
|||
|
|
|
|||
|
|
//Э<><D0AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
if (m_TCPSocketService->SetServiceID(NETWORK_CORRESPOND)==false) return false;
|
|||
|
|
if (m_TCPSocketService->SetTCPSocketEvent(pIAttemperEngine)==false) return false;
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
if(m_MatchServiceManager.GetInterface()!=NULL)
|
|||
|
|
{
|
|||
|
|
if(m_MatchServiceManager->CreateGameMatch(m_GameMatchOption.cbMatchType)==false) return false;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD>˽<EFBFBD>˳<EFBFBD>
|
|||
|
|
if(m_PrivateServiceManager.GetInterface()!=NULL)
|
|||
|
|
{
|
|||
|
|
if(m_PrivateServiceManager->CreatePrivateMatch()==false) return false;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD>Э<EFBFBD><D0AD>
|
|||
|
|
m_DBCorrespondManager.InitDBCorrespondManager(m_KernelDataBaseEngine.GetInterface());
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>Ȼص<C8BB>
|
|||
|
|
m_AttemperEngineSink.m_pInitParameter=&m_InitParameter;
|
|||
|
|
m_AttemperEngineSink.m_pGameParameter=&m_GameParameter;
|
|||
|
|
m_AttemperEngineSink.m_pGameMatchOption=&m_GameMatchOption;
|
|||
|
|
m_AttemperEngineSink.m_pGameServiceAttrib=&m_GameServiceAttrib;
|
|||
|
|
m_AttemperEngineSink.m_pGameServiceOption=&m_GameServiceOption;
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>Ȼص<C8BB>
|
|||
|
|
m_AttemperEngineSink.m_pITimerEngine=m_TimerEngine.GetInterface();
|
|||
|
|
m_AttemperEngineSink.m_pIAttemperEngine=m_AttemperEngine.GetInterface();
|
|||
|
|
m_AttemperEngineSink.m_pITCPSocketService=m_TCPSocketService.GetInterface();
|
|||
|
|
m_AttemperEngineSink.m_pITCPNetworkEngine=m_TCPNetworkEngine.GetInterface();
|
|||
|
|
m_AttemperEngineSink.m_pIGameServiceSustomTime = pIGameServiceSustomTime;
|
|||
|
|
m_AttemperEngineSink.m_pIGameServiceManager=m_GameServiceManager.GetInterface();
|
|||
|
|
m_AttemperEngineSink.m_pIRecordDataBaseEngine=m_RecordDataBaseEngine.GetInterface();
|
|||
|
|
m_AttemperEngineSink.m_pIKernelDataBaseEngine=m_KernelDataBaseEngine.GetInterface();
|
|||
|
|
m_AttemperEngineSink.m_pIMatchServiceManager=m_MatchServiceManager.GetInterface();
|
|||
|
|
m_AttemperEngineSink.m_pIPrivateServiceManager=m_PrivateServiceManager.GetInterface();
|
|||
|
|
m_AttemperEngineSink.m_pIDBCorrespondManager=(IDBCorrespondManager*)m_DBCorrespondManager.QueryInterface(IID_IDBCorrespondManager,VER_IDBCorrespondManager);
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>ݻص<DDBB>
|
|||
|
|
for (INT i=0;i<CountArray(m_RecordDataBaseSink);i++)
|
|||
|
|
{
|
|||
|
|
m_RecordDataBaseSink[i].m_pInitParameter=&m_InitParameter;
|
|||
|
|
m_RecordDataBaseSink[i].m_pGameParameter=&m_GameParameter;
|
|||
|
|
m_RecordDataBaseSink[i].m_pDataBaseParameter=&m_DataBaseParameter;
|
|||
|
|
m_RecordDataBaseSink[i].m_pGameServiceAttrib=&m_GameServiceAttrib;
|
|||
|
|
m_RecordDataBaseSink[i].m_pGameServiceOption=&m_GameServiceOption;
|
|||
|
|
m_RecordDataBaseSink[i].m_pIGameServiceManager=m_GameServiceManager.GetInterface();
|
|||
|
|
m_RecordDataBaseSink[i].m_pIDataBaseEngineEvent=QUERY_OBJECT_PTR_INTERFACE(pIAttemperEngine,IDataBaseEngineEvent);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>ݻص<DDBB>
|
|||
|
|
for (INT i=0;i<CountArray(m_KernelDataBaseSink);i++)
|
|||
|
|
{
|
|||
|
|
m_KernelDataBaseSink[i].m_pInitParameter=&m_InitParameter;
|
|||
|
|
m_KernelDataBaseSink[i].m_pGameParameter=&m_GameParameter;
|
|||
|
|
m_KernelDataBaseSink[i].m_pDataBaseParameter=&m_DataBaseParameter;
|
|||
|
|
m_KernelDataBaseSink[i].m_pGameServiceAttrib=&m_GameServiceAttrib;
|
|||
|
|
m_KernelDataBaseSink[i].m_pGameServiceOption=&m_GameServiceOption;
|
|||
|
|
m_KernelDataBaseSink[i].m_pIGameServiceManager=m_GameServiceManager.GetInterface();
|
|||
|
|
m_KernelDataBaseSink[i].m_pIDataBaseEngineEvent=QUERY_OBJECT_PTR_INTERFACE(pIAttemperEngine,IDataBaseEngineEvent);
|
|||
|
|
m_KernelDataBaseSink[i].m_pIDBCorrespondManager=(IDBCorrespondManager*)m_DBCorrespondManager.QueryInterface(IID_IDBCorrespondManager,VER_IDBCorrespondManager);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
m_TCPNetworkEngine->SetServiceParameter(m_GameServiceOption.wServerPort,m_GameServiceOption.wMaxPlayer,NULL);
|
|||
|
|
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
|
|||
|
|
bool CServiceUnits::InitParameter()
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD>
|
|||
|
|
m_InitParameter.LoadInitParameter();
|
|||
|
|
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ں<EFBFBD>
|
|||
|
|
bool CServiceUnits::StartKernelService()
|
|||
|
|
{
|
|||
|
|
//ʱ<><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
if (m_TimerEngine->StartService()==false)
|
|||
|
|
{
|
|||
|
|
ASSERT(FALSE);
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
if (m_AttemperEngine->StartService()==false)
|
|||
|
|
{
|
|||
|
|
ASSERT(FALSE);
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//Э<><D0AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
if (m_TCPSocketService->StartService()==false)
|
|||
|
|
{
|
|||
|
|
ASSERT(FALSE);
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
if (m_RecordDataBaseEngine->StartService()==false)
|
|||
|
|
{
|
|||
|
|
ASSERT(FALSE);
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
if (m_KernelDataBaseEngine->StartService()==false)
|
|||
|
|
{
|
|||
|
|
ASSERT(FALSE);
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD>Э<EFBFBD><D0AD>
|
|||
|
|
if (m_DBCorrespondManager.StartService()==false)
|
|||
|
|
{
|
|||
|
|
ASSERT(FALSE);
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
if (m_MatchServiceManager.GetInterface()!=NULL)
|
|||
|
|
{
|
|||
|
|
if(m_MatchServiceManager->StartService()==false)
|
|||
|
|
{
|
|||
|
|
ASSERT(FALSE);
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
if (m_PrivateServiceManager.GetInterface()!=NULL)
|
|||
|
|
{
|
|||
|
|
if(m_PrivateServiceManager->StartService()==false)
|
|||
|
|
{
|
|||
|
|
ASSERT(FALSE);
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
bool CServiceUnits::StartNetworkService()
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
if (m_TCPNetworkEngine->StartService()==false)
|
|||
|
|
{
|
|||
|
|
ASSERT(FALSE);
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
bool CServiceUnits::RectifyServiceParameter()
|
|||
|
|
{
|
|||
|
|
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
|
|||
|
|
m_GameServiceManager->GetServiceAttrib(m_GameServiceAttrib);
|
|||
|
|
if (lstrcmp(m_GameServiceAttrib.szServerDLLName,m_GameServiceManager.m_szModuleDllName)!=0)
|
|||
|
|
{
|
|||
|
|
CTraceService::TraceString(TEXT("<EFBFBD><EFBFBD>Ϸģ<EFBFBD><EFBFBD><EFBFBD>İ<EFBFBD><EFBFBD><EFBFBD> DLL <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3> DLL <20><><EFBFBD>ֲ<EFBFBD>һ<EFBFBD><D2BB>"),TraceLevel_Exception);
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
if (m_GameServiceManager->RectifyParameter(m_GameServiceOption)==false)
|
|||
|
|
{
|
|||
|
|
CTraceService::TraceString(TEXT("<EFBFBD><EFBFBD>Ϸģ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ò<EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><EFBFBD>"),TraceLevel_Exception);
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
if ((m_GameServiceOption.wServerType&m_GameServiceAttrib.wSupporType)==0)
|
|||
|
|
{
|
|||
|
|
CTraceService::TraceString(TEXT("<EFBFBD><EFBFBD>Ϸģ<EFBFBD>鲻֧<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EFBFBD>ķ<EFBFBD><EFBFBD><EFBFBD>ģʽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>"),TraceLevel_Exception);
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//ռλ<D5BC><CEBB><EFBFBD><EFBFBD>
|
|||
|
|
if (m_GameServiceAttrib.wChairCount==MAX_CHAIR)
|
|||
|
|
{
|
|||
|
|
CServerRule::SetAllowAndroidSimulate(m_GameServiceOption.dwServerRule,false);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
////<2F><><EFBFBD><EFBFBD>ģʽ
|
|||
|
|
//if ((m_GameServiceOption.cbDistributeRule&DISTRIBUTE_ALLOW)!=0)
|
|||
|
|
//{
|
|||
|
|
// //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
// CServerRule::SetAllowAvertCheatMode(m_GameServiceOption.dwServerRule,true);
|
|||
|
|
|
|||
|
|
// //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
// m_GameServiceOption.wMinDistributeUser=__max(m_GameServiceAttrib.wChairCount,m_GameServiceOption.wMinDistributeUser);
|
|||
|
|
|
|||
|
|
// //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
// if (m_GameServiceOption.wMaxDistributeUser!=0)
|
|||
|
|
// {
|
|||
|
|
// m_GameServiceOption.wMaxDistributeUser=__max(m_GameServiceOption.wMaxDistributeUser,m_GameServiceOption.wMinDistributeUser);
|
|||
|
|
// }
|
|||
|
|
//}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD>ģʽ
|
|||
|
|
if ((m_GameServiceOption.cbDistributeRule&DISTRIBUTE_ALLOW) != 0)
|
|||
|
|
{
|
|||
|
|
//<2F><>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD>
|
|||
|
|
CServerRule::SetForfendGameRule(m_GameServiceOption.dwServerRule, true);
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
|
|||
|
|
CServerRule::SetAllowAvertCheatMode(m_GameServiceOption.dwServerRule, true);
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
|
|||
|
|
if (m_GameServiceOption.wDistributeTimeSpace == 0)
|
|||
|
|
{
|
|||
|
|
m_GameServiceOption.wDistributeTimeSpace = 15;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
|
|||
|
|
if (m_GameServiceOption.wDistributeDrawCount == 0)
|
|||
|
|
{
|
|||
|
|
m_GameServiceOption.wDistributeDrawCount = 1;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
|
|||
|
|
m_GameServiceOption.wMinDistributeUser = __max(m_GameServiceAttrib.wChairCount, m_GameServiceOption.wMinDistributeUser);
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD>;
|
|||
|
|
if (m_GameServiceOption.wMaxDistributeUser != 0)
|
|||
|
|
{
|
|||
|
|
m_GameServiceOption.wMaxDistributeUser = __max(m_GameServiceOption.wMaxDistributeUser, m_GameServiceOption.wMinDistributeUser);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><>Ϸ<EFBFBD><CFB7>¼
|
|||
|
|
if (m_GameServiceOption.wServerType&(GAME_GENRE_GOLD|GAME_GENRE_MATCH))
|
|||
|
|
{
|
|||
|
|
CServerRule::SetRecordGameScore(m_GameServiceOption.dwServerRule,true);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><>ʱд<CAB1><D0B4>
|
|||
|
|
if (m_GameServiceOption.wServerType&(GAME_GENRE_GOLD|GAME_GENRE_MATCH))
|
|||
|
|
{
|
|||
|
|
CServerRule::SetImmediateWriteScore(m_GameServiceOption.dwServerRule,true);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F>ҽ<EFBFBD><D2BD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
if (m_GameServiceOption.wSortID==0) m_GameServiceOption.wSortID=500;
|
|||
|
|
if (m_GameServiceOption.wKindID==0) m_GameServiceOption.wKindID=m_GameServiceAttrib.wKindID;
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
WORD wMaxPlayer=m_GameServiceOption.wTableCount*m_GameServiceAttrib.wChairCount;
|
|||
|
|
m_GameServiceOption.wMaxPlayer=__max(m_GameServiceOption.wMaxPlayer,wMaxPlayer+RESERVE_USER_COUNT);
|
|||
|
|
|
|||
|
|
//<2F><>С<EFBFBD><D0A1><EFBFBD><EFBFBD>
|
|||
|
|
if (m_GameServiceOption.wServerType&GAME_GENRE_GOLD)
|
|||
|
|
{
|
|||
|
|
m_GameServiceOption.lMinTableScore+=m_GameServiceOption.lServiceScore;
|
|||
|
|
m_GameServiceOption.lMinTableScore=__max(m_GameServiceOption.lMinTableScore,m_GameServiceOption.lServiceScore);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD>
|
|||
|
|
if (m_GameServiceOption.lMaxEnterScore!=0L)
|
|||
|
|
{
|
|||
|
|
m_GameServiceOption.lMaxEnterScore=__max(m_GameServiceOption.lMaxEnterScore,m_GameServiceOption.lMinTableScore);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
if((m_GameServiceOption.wServerType&GAME_GENRE_MATCH)!=0)
|
|||
|
|
{
|
|||
|
|
if(m_GameMatchOption.dwMatchID==0)
|
|||
|
|
{
|
|||
|
|
CTraceService::TraceString(TEXT("δ<EFBFBD><EFBFBD><EFBFBD>ر<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"),TraceLevel_Exception);
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD>״̬
|
|||
|
|
bool CServiceUnits::SetServiceStatus(enServiceStatus ServiceStatus)
|
|||
|
|
{
|
|||
|
|
//״̬<D7B4>ж<EFBFBD>
|
|||
|
|
if (m_ServiceStatus!=ServiceStatus)
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD>֪ͨ
|
|||
|
|
if ((m_ServiceStatus!=ServiceStatus_Service)&&(ServiceStatus==ServiceStatus_Stop))
|
|||
|
|
{
|
|||
|
|
LPCTSTR pszString=TEXT("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><EFBFBD>");
|
|||
|
|
CTraceService::TraceString(pszString,TraceLevel_Exception);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>
|
|||
|
|
m_ServiceStatus=ServiceStatus;
|
|||
|
|
|
|||
|
|
//״̬֪ͨ
|
|||
|
|
ASSERT(m_pIServiceUnitsSink!=NULL);
|
|||
|
|
if (m_pIServiceUnitsSink!=NULL) m_pIServiceUnitsSink->OnServiceUnitsStatus(m_ServiceStatus);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>Ϳ<EFBFBD><CDBF><EFBFBD>
|
|||
|
|
bool CServiceUnits::SendControlPacket(WORD wControlID, VOID * pData, WORD wDataSize)
|
|||
|
|
{
|
|||
|
|
//״̬Ч<CCAC><D0A7>
|
|||
|
|
ASSERT(m_AttemperEngine.GetInterface()!=NULL);
|
|||
|
|
if (m_AttemperEngine.GetInterface()==NULL) return false;
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>Ϳ<EFBFBD><CDBF><EFBFBD>
|
|||
|
|
m_AttemperEngine->OnEventControl(wControlID,pData,wDataSize);
|
|||
|
|
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
|||
|
|
bool CServiceUnits::LoadDataBaseParameter(LPCTSTR pszDataBaseAddr, LPCTSTR pszDataBaseName, tagDataBaseParameter & DataBaseParameter)
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
CDataBaseAide PlatformDBAide;
|
|||
|
|
CDataBaseHelper PlatformDBModule;
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
if ((PlatformDBModule.GetInterface()==NULL)&&(PlatformDBModule.CreateInstance()==false))
|
|||
|
|
{
|
|||
|
|
ASSERT(FALSE);
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
tagDataBaseParameter * pPlatformDBParameter=&m_InitParameter.m_PlatformDBParameter;
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
PlatformDBModule->SetConnectionInfo(pPlatformDBParameter->szDataBaseAddr,pPlatformDBParameter->wDataBasePort,
|
|||
|
|
pPlatformDBParameter->szDataBaseName,pPlatformDBParameter->szDataBaseUser,pPlatformDBParameter->szDataBasePass);
|
|||
|
|
|
|||
|
|
//<2F><>ȡ<EFBFBD><C8A1>Ϣ
|
|||
|
|
try
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
PlatformDBModule->OpenConnection();
|
|||
|
|
PlatformDBAide.SetDataBase(PlatformDBModule.GetInterface());
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
|||
|
|
PlatformDBAide.ResetParameter();
|
|||
|
|
PlatformDBAide.AddParameter(TEXT("@strDataBaseAddr"),pszDataBaseAddr);
|
|||
|
|
|
|||
|
|
//ִ<>в<EFBFBD>ѯ
|
|||
|
|
if (PlatformDBAide.ExecuteProcess(TEXT("GSP_GS_LoadDataBaseInfo"),true)!=DB_SUCCESS)
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
|||
|
|
TCHAR szErrorDescribe[128]=TEXT("");
|
|||
|
|
PlatformDBAide.GetValue_String(TEXT("ErrorDescribe"),szErrorDescribe,CountArray(szErrorDescribe));
|
|||
|
|
|
|||
|
|
//<2F><>ʾ<EFBFBD><CABE>Ϣ
|
|||
|
|
CTraceService::TraceString(szErrorDescribe,TraceLevel_Exception);
|
|||
|
|
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
|
|||
|
|
TCHAR szDBUserRead[512]=TEXT(""),szDBPassRead[512]=TEXT("");
|
|||
|
|
PlatformDBAide.GetValue_String(TEXT("DBUser"),szDBUserRead,CountArray(szDBUserRead));
|
|||
|
|
PlatformDBAide.GetValue_String(TEXT("DBPassword"),szDBPassRead,CountArray(szDBPassRead));
|
|||
|
|
|
|||
|
|
//<2F><>ȡ<EFBFBD><C8A1>Ϣ
|
|||
|
|
DataBaseParameter.wDataBasePort=PlatformDBAide.GetValue_WORD(TEXT("DBPort"));
|
|||
|
|
lstrcpyn(DataBaseParameter.szDataBaseAddr,pszDataBaseAddr,CountArray(DataBaseParameter.szDataBaseAddr));
|
|||
|
|
lstrcpyn(DataBaseParameter.szDataBaseName,pszDataBaseName,CountArray(DataBaseParameter.szDataBaseName));
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
TCHAR szDataBaseUser[32]=TEXT(""),szDataBasePass[32]=TEXT("");
|
|||
|
|
lstrcpyn(DataBaseParameter.szDataBaseUser,szDBUserRead,CountArray(DataBaseParameter.szDataBaseUser));
|
|||
|
|
lstrcpyn(DataBaseParameter.szDataBasePass,szDBPassRead,CountArray(DataBaseParameter.szDataBasePass));
|
|||
|
|
//CWHEncrypt::XorCrevasse(szDBUserRead,DataBaseParameter.szDataBaseUser,CountArray(DataBaseParameter.szDataBaseUser));
|
|||
|
|
//CWHEncrypt::XorCrevasse(szDBPassRead,DataBaseParameter.szDataBasePass,CountArray(DataBaseParameter.szDataBasePass));
|
|||
|
|
}
|
|||
|
|
catch (IDataBaseException * pIException)
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
|||
|
|
LPCTSTR pszDescribe=pIException->GetExceptionDescribe();
|
|||
|
|
CTraceService::TraceString(pszDescribe,TraceLevel_Exception);
|
|||
|
|
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
|||
|
|
LRESULT CServiceUnits::OnUIControlRequest(WPARAM wParam, LPARAM lParam)
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
tagDataHead DataHead;
|
|||
|
|
BYTE cbBuffer[MAX_ASYNCHRONISM_DATA];
|
|||
|
|
|
|||
|
|
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
|
|||
|
|
CWHDataLocker DataLocker(m_CriticalSection);
|
|||
|
|
if (m_DataQueue.DistillData(DataHead,cbBuffer,sizeof(cbBuffer))==false)
|
|||
|
|
{
|
|||
|
|
ASSERT(FALSE);
|
|||
|
|
return NULL;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD>
|
|||
|
|
switch (DataHead.wIdentifier)
|
|||
|
|
{
|
|||
|
|
case UI_CORRESPOND_RESULT: //Э<><D0AD><EFBFBD>ɹ<EFBFBD>
|
|||
|
|
{
|
|||
|
|
//Ч<><D0A7><EFBFBD><EFBFBD>Ϣ
|
|||
|
|
ASSERT(DataHead.wDataSize==sizeof(CP_ControlResult));
|
|||
|
|
if (DataHead.wDataSize!=sizeof(CP_ControlResult)) return 0;
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
CP_ControlResult * pControlResult=(CP_ControlResult *)cbBuffer;
|
|||
|
|
|
|||
|
|
//ʧ<>ܴ<EFBFBD><DCB4><EFBFBD>
|
|||
|
|
if ((m_ServiceStatus!=ServiceStatus_Service)&&(pControlResult->cbSuccess==ER_FAILURE))
|
|||
|
|
{
|
|||
|
|
ConcludeService();
|
|||
|
|
return 0;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F>ɹ<EFBFBD><C9B9><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
if ((m_ServiceStatus!=ServiceStatus_Service)&&(pControlResult->cbSuccess==ER_SUCCESS))
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD>״̬
|
|||
|
|
SetServiceStatus(ServiceStatus_Service);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return 0;
|
|||
|
|
}
|
|||
|
|
case UI_SERVICE_CONFIG_RESULT: //<2F><><EFBFBD>ý<EFBFBD><C3BD><EFBFBD>
|
|||
|
|
{
|
|||
|
|
//Ч<><D0A7><EFBFBD><EFBFBD>Ϣ
|
|||
|
|
ASSERT(DataHead.wDataSize==sizeof(CP_ControlResult));
|
|||
|
|
if (DataHead.wDataSize!=sizeof(CP_ControlResult)) return 0;
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
CP_ControlResult * pControlResult=(CP_ControlResult *)cbBuffer;
|
|||
|
|
|
|||
|
|
//ʧ<>ܴ<EFBFBD><DCB4><EFBFBD>
|
|||
|
|
if ((m_ServiceStatus!=ServiceStatus_Service)&&(pControlResult->cbSuccess==ER_FAILURE))
|
|||
|
|
{
|
|||
|
|
ConcludeService();
|
|||
|
|
return 0;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F>ɹ<EFBFBD><C9B9><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
if ((m_ServiceStatus!=ServiceStatus_Service)&&(pControlResult->cbSuccess==ER_SUCCESS))
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
if (StartNetworkService()==false)
|
|||
|
|
{
|
|||
|
|
ConcludeService();
|
|||
|
|
return 0;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD>Э<EFBFBD><D0AD>
|
|||
|
|
SendControlPacket(CT_CONNECT_CORRESPOND,NULL,0);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return 0;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return 0;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//////////////////////////////////////////////////////////////////////////////////
|