//初始化 bool __cdecl CTableFrameSink::InitTableFrameSink(IUnknownEx * pIUnknownEx) { //查询接口 ASSERT(pIUnknownEx!=NULL); m_pITableFrame=QUERY_OBJECT_PTR_INTERFACE(pIUnknownEx,ITableFrame); if (m_pITableFrame==NULL) return false; //获取参数 m_pGameServiceOption=m_pITableFrame->GetGameServiceOption(); ASSERT(m_pGameServiceOption!=NULL); return true; }
//设置接口 bool __cdecl CTimerEngine::SetTimerEngineEvent(IUnknownEx * pIUnknownEx) { //效验参数 ASSERT(pIUnknownEx != NULL); ASSERT(m_bService == false); if (m_bService == true) return false; if (pIUnknownEx == NULL) return false; //设置接口 ASSERT(pIUnknownEx != NULL); m_pIQueueServiceSink = QUERY_OBJECT_PTR_INTERFACE(pIUnknownEx, IQueueServiceSink); ASSERT(m_pIQueueServiceSink != NULL); return (m_pIQueueServiceSink != NULL); }
//关闭当前 void CGameFrame::CloseCurrentViewItem() { //房间判断 ASSERT(m_pActiveViewItem!=NULL); if (m_pActiveViewItem!=&m_DlgGamePlaza) { IRoomViewItem * pIRoomViewItem=QUERY_OBJECT_PTR_INTERFACE(m_pActiveViewItem,IRoomViewItem); ASSERT(pIRoomViewItem!=NULL); CloseRoomViewItem(pIRoomViewItem); } else AfxGetMainWnd()->PostMessage(WM_CLOSE,0,0); return; }
//注册接口 bool __cdecl CDataBaseEngine::SetDataBaseEngineSink(IUnknownEx * pIUnknownEx) { //效验参数 ASSERT(pIUnknownEx != NULL); ASSERT(m_pIDataBaseEngineSink == NULL); if (pIUnknownEx == NULL) return false; if (m_pIDataBaseEngineSink != NULL) return false; //查询接口 m_pIDataBaseEngineSink = QUERY_OBJECT_PTR_INTERFACE(pIUnknownEx, IDataBaseEngineSink); if (m_pIDataBaseEngineSink == NULL) { CTraceService::TraceString(TEXT("数据库引擎外挂服务接口获取失败,挂接操作失败"), TraceLevel_Exception); return false; } return true; }
//注册钩子 bool __cdecl CAsynchronismEngine::SetAsynchronismSink(IUnknownEx * pIUnknownEx) { //获取接口 IAsynchronismEngineSink * pIAsynchronismEngineSink = QUERY_OBJECT_PTR_INTERFACE(pIUnknownEx, IAsynchronismEngineSink); ASSERT(pIAsynchronismEngineSink != NULL); if (pIAsynchronismEngineSink == NULL) return false; //查找现存 IAsynchronismEngineSink * pIAsynchronismEngineSinkTemp = NULL; for (INT_PTR i = 0; i < m_AsynchronismEngineSinkArray.GetCount(); i++) { pIAsynchronismEngineSinkTemp = m_AsynchronismEngineSinkArray[0]; ASSERT(pIAsynchronismEngineSinkTemp != NULL); if (pIAsynchronismEngineSinkTemp == pIAsynchronismEngineSink) return false; } //注册钩子 m_AsynchronismEngineSinkArray.Add(pIAsynchronismEngineSink); return true; }
//插入请求 bool __cdecl CAsynchronismEngine::InsertRequest(WORD wRequestID, void * const pBuffer, WORD wDataSize, IUnknownEx * pIUnknownEx) { //效验状态 ASSERT(wDataSize <= sizeof(m_cbBuffer)); if (m_bService == false) return false; if (wDataSize > sizeof(m_cbBuffer)) return false; //查询接口 IAsynchronismEngineSink * pIAsynchronismEngineSink = QUERY_OBJECT_PTR_INTERFACE(pIUnknownEx, IAsynchronismEngineSink); ASSERT(pIAsynchronismEngineSink != NULL); if (pIAsynchronismEngineSink == NULL) return false; //插入数据 CThreadLock lcok(m_CriticalSection); // CThreadLockHandle ThreadLockHandle(&m_ThreadLock); if (m_DataStorage.InsertData(wRequestID, pBuffer, wDataSize) == false) return false; //投递消息 PostMessage(m_ControlWnd.m_hWnd, WM_ASYN_REQUEST, wRequestID, (LPARAM)pIAsynchronismEngineSink); return true; }
//取消注册 bool __cdecl CAsynchronismEngine::UnRegisterAsynchronismEngineSink(IUnknownEx * pIUnknownEx) { //获取接口 IAsynchronismEngineSink * pIAsynchronismEngineSink = QUERY_OBJECT_PTR_INTERFACE(pIUnknownEx, IAsynchronismEngineSink); ASSERT(pIAsynchronismEngineSink != NULL); if (pIAsynchronismEngineSink == NULL) return false; //删除钩子 IAsynchronismEngineSink * pIAsynchronismEngineSinkTemp = NULL; for (INT_PTR i = 0; i < m_AsynchronismEngineSinkArray.GetCount(); i++) { pIAsynchronismEngineSinkTemp = m_AsynchronismEngineSinkArray[0]; ASSERT(pIAsynchronismEngineSinkTemp != NULL); if (pIAsynchronismEngineSinkTemp == pIAsynchronismEngineSink) { m_AsynchronismEngineSinkArray.RemoveAt(i); return true; } } return false; }
//开始服务 bool CCenterService::StartService() { //停止服务 ASSERT(m_ServiceStatus!=ServiceStatus_Service); if (m_ServiceStatus==ServiceStatus_Service) return false; //终止服务 StopService(); //加载参数 m_InitParamter.LoadInitParamter(); //创建组件 if ((m_DataBaseEngine.GetInterface()==NULL)&&(m_DataBaseEngine.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 * pIDataBaseEngineSink=QUERY_OBJECT_INTERFACE(m_DataBaseEngineSink,IUnknownEx); IUnknownEx * pIAttemperEngineSink=QUERY_OBJECT_INTERFACE(m_AttemperEngineSink,IUnknownEx); //绑定接口 if (m_AttemperEngine->SetAttemperEngineSink(pIAttemperEngineSink)==false) return false; if (m_DataBaseEngine->SetDataBaseEngineSink(pIDataBaseEngineSink)==false) return false; //内核组件 if (m_AttemperEngine->SetNetworkEngine(pITCPNetworkEngine)==false) return false; if (m_TCPNetworkEngine->SetTCPNetworkEngineEvent(pIAttemperEngine)==false) return false; //调度回调 m_AttemperEngineSink.m_pInitParamter=&m_InitParamter; m_AttemperEngineSink.m_pIDataBaseEngine=m_DataBaseEngine.GetInterface(); m_AttemperEngineSink.m_pITCPNetworkEngine=m_TCPNetworkEngine.GetInterface(); //数据库回调 m_DataBaseEngineSink.m_pInitParamter=&m_InitParamter; m_DataBaseEngineSink.m_pIDataBaseEngineEvent=QUERY_OBJECT_PTR_INTERFACE(pIAttemperEngine,IDataBaseEngineEvent); //配置网络 WORD wMaxConnect=m_InitParamter.m_wMaxConnect; WORD wServicePort=m_InitParamter.m_wListenPort; if (m_TCPNetworkEngine->SetServiceParameter(wServicePort,wMaxConnect)==false) return false; //调度引擎 if (m_AttemperEngine->StartService()==false) { ASSERT(FALSE); return false; } //数据引擎 if (m_DataBaseEngine->StartService()==false) { ASSERT(FALSE); return false; } //网络引擎 if (m_TCPNetworkEngine->StartService()==false) { ASSERT(FALSE); return false; } //设置变量 m_ServiceStatus=ServiceStatus_Service; return true; }
//服务配置 ////////////////////////////////////////////////////////////////////////// //设置服务 bool CTraceService::SetTraceService(IUnknownEx * pIUnknownEx) { g_pITraceService = QUERY_OBJECT_PTR_INTERFACE(pIUnknownEx, ITraceService); return NULL != g_pITraceService; }
//内核配置 bool __cdecl CClientKernel::InitClientKernel(LPCTSTR lpszComLine, IUnknownEx * pIUnknownEx) { //效验参数 ASSERT(lpszComLine!=NULL); if (lpszComLine==NULL) return false; //创建窗口 if (m_hWnd==NULL) { CRect rcCreate(0,0,0,0); Create(NULL,NULL,WS_CHILD,rcCreate,GetDesktopWindow(),100); } //获取框架 m_pIClientKernelSink=QUERY_OBJECT_PTR_INTERFACE(pIUnknownEx,IClientKernelSink); if (m_pIClientKernelSink==NULL) return false; m_hWndGameFrame=m_pIClientKernelSink->GetFrameWnd(); //读取配置 m_bAllowUserLookon=AfxGetApp()->GetProfileInt(TEXT("GameOption"),TEXT("AllowLookon"),FALSE)?true:false; //视频设置 CVideoServiceManager * pVideoServiceManager=CVideoServiceManager::GetInstance(); if (pVideoServiceManager!=NULL) pVideoServiceManager->SetClientKernel(QUERY_OBJECT_PTR_INTERFACE(this,IUnknownEx)); //命令行处理 if (lpszComLine[0]!=0) { //提出 TOKEN int nStringLength=0; CString strRoomToken; LPCTSTR pszRoomToken=TEXT("/RoomToken:"); LPCTSTR lpszBeginString=lpszComLine; while (true) { LPCTSTR lpszEndString=_tcschr(lpszBeginString,TEXT(' ')); nStringLength=(lpszEndString==NULL)?lstrlen(lpszBeginString):(int)(lpszEndString-lpszBeginString); //判断标识 const int nTokenLength=lstrlen(pszRoomToken); if ((nStringLength>=nTokenLength)&&(memcmp(lpszBeginString,pszRoomToken,nTokenLength*sizeof(TCHAR))==0)) { CopyMemory(strRoomToken.GetBufferSetLength(nStringLength-nTokenLength),lpszBeginString+nTokenLength, (nStringLength-nTokenLength)*sizeof(TCHAR)); strRoomToken.ReleaseBuffer(); break; } //设置变量 if (lpszEndString==NULL) break; lpszBeginString=(lpszEndString+1); } //共享内存 if (strRoomToken.GetLength()>0) { m_hShareMemory=OpenFileMapping(FILE_MAP_ALL_ACCESS,FALSE,strRoomToken); if (m_hShareMemory==NULL) return false; m_pShareMemory=(tagShareMemory *)MapViewOfFile(m_hShareMemory,FILE_MAP_ALL_ACCESS,0,0,0); if (m_pShareMemory==NULL) return false; if (m_pShareMemory->wDataSize<sizeof(tagShareMemory)) return false; m_pShareMemory->hWndGameFrame=m_hWndGameFrame; } //信道模块 if (m_hShareMemory!=NULL) { ASSERT(m_pShareMemory->hWndGameServer!=NULL); IUnknownEx * pIUnknownEx=QUERY_ME_INTERFACE(IUnknownEx); if (m_ChannelServiceHelper.CreateInstance()==false) return false; if (m_ChannelServiceHelper->SetChannelMessageSink(pIUnknownEx)==false) return false; if (m_ChannelServiceHelper->CreateChannel(m_pShareMemory->hWndGameServer)==false) return false; } } //更新标题 UpdateGameTitle(); return true; }
//配置组件 bool CServiceUnits::InitializeService() { //加载参数 m_InitParameter.LoadInitParameter(); //配置参数 m_GameParameter.wMedalRate=1L; m_GameParameter.wRevenueRate=1L; //连接信息 LPCTSTR pszDataBaseAddr=m_GameServiceOption.szDataBaseAddr; LPCTSTR pszDataBaseName=m_GameServiceOption.szDataBaseName; if (LoadDataBaseParameter(pszDataBaseAddr,pszDataBaseName,m_DataBaseParameter)==false) return false; //组件接口 IUnknownEx * pIAttemperEngine=m_AttemperEngine.GetInterface(); IUnknownEx * pITCPNetworkEngine=m_TCPNetworkEngine.GetInterface(); IUnknownEx * pIAttemperEngineSink=QUERY_OBJECT_INTERFACE(m_AttemperEngineSink,IUnknownEx); //数据引擎 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); //绑定接口 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; //内核组件 if (m_TimerEngine->SetTimerEngineEvent(pIAttemperEngine)==false) return false; if (m_AttemperEngine->SetNetworkEngine(pITCPNetworkEngine)==false) return false; if (m_TCPNetworkEngine->SetTCPNetworkEngineEvent(pIAttemperEngine)==false) return false; //协调服务 if (m_TCPSocketService->SetServiceID(NETWORK_CORRESPOND)==false) return false; if (m_TCPSocketService->SetTCPSocketEvent(pIAttemperEngine)==false) return false; //数据协调 m_DBCorrespondManager.InitDBCorrespondManager(m_KernelDataBaseEngine.GetInterface()); //调度回调 m_AttemperEngineSink.m_pInitParameter=&m_InitParameter; m_AttemperEngineSink.m_pGameParameter=&m_GameParameter; m_AttemperEngineSink.m_pGameServiceAttrib=&m_GameServiceAttrib; m_AttemperEngineSink.m_pGameServiceOption=&m_GameServiceOption; //调度回调 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_pIGameServiceManager=m_GameServiceManager.GetInterface(); m_AttemperEngineSink.m_pIRecordDataBaseEngine=m_RecordDataBaseEngine.GetInterface(); m_AttemperEngineSink.m_pIKernelDataBaseEngine=m_KernelDataBaseEngine.GetInterface(); m_AttemperEngineSink.m_pIGameMatchServiceManager=m_GameMatchServiceManager.GetInterface(); m_AttemperEngineSink.m_pIDBCorrespondManager=(IDBCorrespondManager*)m_DBCorrespondManager.QueryInterface(IID_IDBCorrespondManager,VER_IDBCorrespondManager); //数据回调 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); } //数据回调 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); } //配置网络 m_TCPNetworkEngine->SetServiceParameter(m_GameServiceOption.wServerPort,m_GameServiceOption.wMaxPlayer,szCompilation); return true; }
//创建函数 BOOL CFlashActiveX::CreateControl(DWORD dwStyle, CWnd * pParentWnd, CRect rcCreate, HINSTANCE hInstance, IUnknownEx * pIUnknownEx) { //状态效验 ASSERT(m_hWnd==NULL); if (m_hWnd!=NULL) return FALSE; //变量定义 WNDCLASSEX WndClassEx; ZeroMemory(&WndClassEx,sizeof(WndClassEx)); //设置变量 WndClassEx.cbSize=sizeof(WNDCLASSEX); WndClassEx.hInstance=hInstance; WndClassEx.lpszClassName=WND_FLASH_CLASS; WndClassEx.lpfnWndProc=::DefWindowProc; //注册窗口 RegisterClassEx(&WndClassEx); //查询接口 m_pIFlashControlSink=QUERY_OBJECT_PTR_INTERFACE(pIUnknownEx,IFlashControlSink); //创建窗口 m_hWnd=CreateWindowEx(WS_EX_LAYERED,WND_FLASH_CLASS,NULL,dwStyle,rcCreate.left,rcCreate.top,rcCreate.Width(),rcCreate.Height(), pParentWnd->m_hWnd,NULL,hInstance,(VOID *)this); //创建控件 GUID ClsID=ShockwaveFlashObjects::CLSID_ShockwaveFlash; HRESULT hResult=OleCreate(ClsID,IID_IOleObject,OLERENDER_DRAW,0,(IOleClientSite *)this,(IStorage *)this,(VOID **)&m_pIOleObject); //结果判断 if (FAILED(hResult)) { static bool bShow=true; if ((hResult==REGDB_E_CLASSNOTREG)&&(bShow==false)) { bShow=false; //提示消息 CInformation Information; if (IDOK==Information.ShowMessageBox(TEXT("系统提示"),TEXT("您的FLASH播放器版本过低,为了正常使用功能,请您下载最新的Flash插件。点击确定最新的Flash插件 "),MB_OKCANCEL,30)) { //打开页面 ShellExecute(NULL,TEXT("OPEN"),TEXT("http://www.adobe.com/go/getflashplayer"),NULL,NULL,SW_NORMAL); } } return FALSE; } //容器模式 OleSetContainedObject(m_pIOleObject,TRUE); //查询接口 if (FAILED(m_pIOleObject->QueryInterface(__uuidof(IFalshControl),(VOID * *)&m_pIFalshControl))) { ASSERT(FALSE); return FALSE; } //查询接口 if (FAILED(m_pIOleObject->QueryInterface(IID_IViewObjectEx,(VOID * *)&m_pIViewObjectEx))) { if (FAILED(m_pIOleObject->QueryInterface(IID_IViewObject,(VOID **)&m_pIViewObject))) { ASSERT(FALSE); return FALSE; } } //设置组件 m_pIFalshControl->PutWMode(TEXT("transparent")); //显示控件 if (FAILED(m_pIOleObject->DoVerb(OLEIVERB_UIACTIVATE,NULL,(IOleClientSite *)this,0L,NULL,NULL))) { ASSERT(FALSE); return FALSE; } return TRUE; }