//启动服务 bool __cdecl CDataBaseEngine::StartService() { //判断状态 if (m_bService == true) { CTraceService::TraceString(TEXT("数据库引擎重复启动,启动操作忽略"), TraceLevel_Warning); return true; } //外挂接口 if (m_pIDataBaseEngineSink == NULL) { CTraceService::TraceString(TEXT("数据库引擎外挂服务不存在"), TraceLevel_Exception); return false; } //设置队列 if (m_QueueServiceEvent.SetQueueServiceSink(QUERY_ME_INTERFACE(IUnknownEx)) == false) { CTraceService::TraceString(TEXT("数据库引擎与队列服务绑定失败"), TraceLevel_Exception); return false; } //启动外挂 if (m_pIDataBaseEngineSink->OnDataBaseEngineStart(QUERY_ME_INTERFACE(IUnknownEx)) == false) { CTraceService::TraceString(TEXT("数据库引擎外挂服务启动失败"), TraceLevel_Exception); return false; } //设置变量 m_bService = true; return true; }
//构造函数 CGameFrameView::CGameFrameView() { //位置变量 ZeroMemory(&m_ptClock,sizeof(m_ptClock)); ZeroMemory(&m_ptReady,sizeof(m_ptReady)); ZeroMemory(&m_ptAvatar,sizeof(m_ptAvatar)); ZeroMemory(&m_ptNickName,sizeof(m_ptNickName)); //用户变量 ZeroMemory(m_wUserClock,sizeof(m_wUserClock)); ZeroMemory(m_pIClientUserItem,sizeof(m_pIClientUserItem)); //组件接口 m_pIStringMessage=NULL; m_pIGameLevelParser=NULL; //设置变量 ASSERT(m_pGameFrameView==NULL); if (m_pGameFrameView==NULL) m_pGameFrameView=this; m_wRollTextCount=0; //注册组件 CGlobalUnits * pGlobalUnits=CGlobalUnits::GetInstance(); pGlobalUnits->RegisterGlobalModule(MODULE_GAME_FRAME_VIEW,QUERY_ME_INTERFACE(IUnknownEx)); //比赛变量 m_pMatchInfo=NULL; m_pMatchWaitTip=NULL; m_pMatchResult=NULL; m_pDlgMatchAwards=NULL; return; }
//服务接口 ////////////////////////////////////////////////////////////////////////// //启动服务 bool __cdecl CTCPSocketService::StartService() { //效验状态 if (m_bService == true) { CTraceService::TraceString(TEXT("网络服务重复启动,启动操作忽略"), TraceLevel_Warning); return true; } //绑定对象 if (m_QueueService.SetQueueServiceSink(QUERY_ME_INTERFACE(IUnknownEx)) == false) { CTraceService::TraceString(TEXT("网络服务与触发服务绑定失败"), TraceLevel_Exception); return false; } try { //绑定对象 if (m_QueueService.SetQueueServiceSink(QUERY_ME_INTERFACE(IUnknownEx)) == false) { CTraceService::TraceString(TEXT("网络引擎与触发服务绑定失败"), TraceLevel_Exception); return false; } // m_hSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); // if (m_hSocket == INVALID_SOCKET) return false; if ((m_hWnd == NULL) && (!Create(NULL, NULL, WS_CHILD, CRect(0, 0, 0, 0), GetDesktopWindow(), ID_SOCKET_WND, NULL))) return false; if (m_QueueService.StartService()) { m_bService = true; } } catch (LPCTSTR pszError) { CTraceService::TraceString(pszError, TraceLevel_Exception); return false; } return m_bService; }
//设置错误 void CADOError::SetErrorInfo(enSQLException enErrorType, LPCTSTR pszDescribe) { //设置错误 m_enErrorType = enErrorType; m_strErrorDescribe = pszDescribe; //抛出错误 throw QUERY_ME_INTERFACE(IDataBaseException); return; }
//执行下载 bool CCustomFaceManager::PerformDownLoad(DWORD dwUserID, DWORD dwCustomID) { //设置变量 ZeroMemory(&m_CustomFaceInfo,sizeof(m_CustomFaceInfo)); //构造地址 TCHAR szCustomFace[128]=TEXT(""); _sntprintf(szCustomFace,CountArray(szCustomFace),TEXT("%s/CustomFace.asp?UserID=%ld&CustomID=%ld"),szPlatformLink,dwUserID,dwCustomID); //下载头像 ASSERT(m_DownLoad.GetDownLoadStatus()==DownLoadStatus_Conclude); m_DownLoad.PerformDownLoad(szCustomFace,QUERY_ME_INTERFACE(IUnknownEx)); return true; }
//停止服务 bool __cdecl CDataBaseEngine::ConcludeService() { //设置变量 m_bService = false; //停止请求队列 m_QueueServiceEvent.SetQueueServiceSink(NULL); //停止外挂 if (m_pIDataBaseEngineSink != NULL) { m_pIDataBaseEngineSink->OnDataBaseEngineStop(QUERY_ME_INTERFACE(IUnknownEx)); m_pIDataBaseEngineSink = NULL; } m_QueueServiceEvent.SetQueueServiceSink(NULL); return true; }
//构造函数 CGameFrameWnd::CGameFrameWnd() { //滚动变量 m_nScrollXPos=0L; m_nScrollYPos=0L; m_nScrollXMax=0L; m_nScrollYMax=0L; //状态变量 m_bMaxShow=false; m_bShowControl=true; m_rcNormalSize.SetRect(0,0,0,0); //组件接口 m_pIClientKernel=NULL; m_pIGameFrameView=NULL; //控件指针 m_pDlgGameRule=NULL; //框架环绕 tagEncircleResource EncircleFrame; EncircleFrame.pszImageTL=MAKEINTRESOURCE(IDB_FRAME_TL); EncircleFrame.pszImageTM=MAKEINTRESOURCE(IDB_FRAME_TM); EncircleFrame.pszImageTR=MAKEINTRESOURCE(IDB_FRAME_TR); EncircleFrame.pszImageML=MAKEINTRESOURCE(IDB_FRAME_ML); EncircleFrame.pszImageMR=MAKEINTRESOURCE(IDB_FRAME_MR); EncircleFrame.pszImageBL=MAKEINTRESOURCE(IDB_FRAME_BL); EncircleFrame.pszImageBM=MAKEINTRESOURCE(IDB_FRAME_BM); EncircleFrame.pszImageBR=MAKEINTRESOURCE(IDB_FRAME_BR); m_FrameEncircle.InitEncircleResource(EncircleFrame,GetModuleHandle(GAME_FRAME_DLL_NAME)); //注册组件 CGlobalUnits * pGlobalUnits=CGlobalUnits::GetInstance(); pGlobalUnits->RegisterGlobalModule(MODULE_GAME_FRAME_WND,QUERY_ME_INTERFACE(IUnknownEx)); return; }
BOOL IAndroid::Startup(const CString& szIPAdress, WORD wPort, const CString& szPwd) { //设置组件 IUnknownEx* pIUnknown = QUERY_ME_INTERFACE(IUnknownEx); if (!m_ClientSocket.CreateInstance()) return FALSE; if (!m_ClientSocket->SetTCPSocketSink(pIUnknown)) return false; DWORD dwResult = m_ClientSocket->Connect(szIPAdress, wPort); if (!dwResult) { CString szMessage; szMessage.Format("[%d]正在连接", m_dwUserID); CTraceService::TraceString(szMessage, TraceLevel_Normal); m_Password = szPwd; } return TRUE; }
//建立消息 INT CGameFrameWnd::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (__super::OnCreate(lpCreateStruct)==-1) return -1; //设置窗口 ModifyStyle(WS_CAPTION,0,0); ModifyStyleEx(WS_BORDER|WS_EX_CLIENTEDGE|WS_EX_WINDOWEDGE,0,0); //设置窗口 ModifyStyle(0, WS_MINIMIZEBOX); ModifyStyle(0, WS_MAXIMIZEBOX); //变量定义 ASSERT(CGlobalUnits::GetInstance()!=NULL); CGlobalUnits * pGlobalUnits=CGlobalUnits::GetInstance(); //查询接口 m_pIClientKernel=(IClientKernel *)pGlobalUnits->QueryGlobalModule(MODULE_CLIENT_KERNEL,IID_IClientKernel,VER_IClientKernel); m_pIGameFrameView=(IGameFrameView *)pGlobalUnits->QueryGlobalModule(MODULE_GAME_FRAME_VIEW,IID_IGameFrameView,VER_IGameFrameView); //创建按钮 CRect rcCreate(0,0,0,0); m_btMin.Create(NULL,WS_CHILD|WS_VISIBLE,rcCreate,this,IDC_MIN); m_btMax.Create(NULL,WS_CHILD|WS_VISIBLE,rcCreate,this,IDC_MAX); m_btClose.Create(NULL,WS_CHILD|WS_VISIBLE,rcCreate,this,IDC_CLOSE); m_btOption.Create(NULL,WS_CHILD|WS_VISIBLE,rcCreate,this,IDC_OPTION); m_btMuteContrl.Create(NULL,WS_CHILD|WS_VISIBLE,rcCreate,this,IDC_MUTE); m_btRule.Create(NULL,WS_CHILD|WS_VISIBLE,rcCreate,this,IDC_RULE); m_btControl.Create(NULL,WS_CHILD|WS_VISIBLE,rcCreate,this,IDC_CONTROL); //设置按钮 HINSTANCE hInstance=GetModuleHandle(GAME_FRAME_DLL_NAME); m_btMin.SetButtonImage(IDB_BT_MIN,hInstance,false,false); m_btMax.SetButtonImage(IDB_BT_MAX,hInstance,false,false); m_btClose.SetButtonImage(IDB_BT_CLOSE,TEXT("BT_CLOSE"),hInstance,false,false); m_btOption.SetButtonImage(IDB_BT_OPTION,hInstance,false,false); m_btMuteContrl.SetButtonImage((pGlobalUnits->m_bMuteStatuts==false)?IDB_BT_MUTE:IDB_BT_SLIENT,hInstance,false,false); m_btRule.SetButtonImage(IDB_BT_RULE,hInstance,false,false); m_btControl.SetButtonImage(IDB_BT_CONTROL_BACK,(m_bShowControl==false)?TEXT("BT_GAME_LIST_SHOW"):TEXT("BT_GAME_LIST_HIDE"),hInstance,true,false); //控制窗口 AfxSetResourceHandle(hInstance); m_GameFrameControl.Create(IDD_GAME_CONTROL,this); m_SkinSplitter.Create(NULL,NULL,WS_CHILD|WS_VISIBLE,rcCreate,this,IDC_SKIN_SPLITTER); //提示控件 m_ToolTipCtrl.Create(this); m_ToolTipCtrl.Activate(TRUE); m_ToolTipCtrl.AddTool(&m_btMin,TEXT("最小化")); m_ToolTipCtrl.AddTool(&m_btMax,TEXT("最大化")); m_ToolTipCtrl.AddTool(&m_btClose,TEXT("关闭游戏")); //设置位置 CSize SizeRestrict; SizeRestrict.SetSize(LESS_SCREEN_CX,LESS_SCREEN_CY); //设置分辨率 m_ScreenMetrics.cx = ::GetSystemMetrics(SM_CXSCREEN); m_ScreenMetrics.cy = ::GetSystemMetrics(SM_CYSCREEN); //窗口位置 CRect rcArce; SystemParametersInfo(SPI_GETWORKAREA,0,&rcArce,SPIF_SENDCHANGE); //读取位置 CWHRegKey InfoKeyItem; if (InfoKeyItem.OpenRegKey(REG_INTERFACE_INFO,false)==true) { SizeRestrict.cx=InfoKeyItem.GetValue(TEXT("ScreenWidth"),rcArce.Width()/2); SizeRestrict.cy=InfoKeyItem.GetValue(TEXT("ScreenHeight"),rcArce.Height()/2); } //位置调整 SizeRestrict.cx=__max(LESS_SCREEN_CX,SizeRestrict.cx); SizeRestrict.cy=__max(LESS_SCREEN_CY,SizeRestrict.cy); SizeRestrict.cx=__min(rcArce.Width(),SizeRestrict.cx); SizeRestrict.cy=__min(rcArce.Height(),SizeRestrict.cy); //移动窗口 m_rcNormalSize.top=(rcArce.Height()-SizeRestrict.cy)/2; m_rcNormalSize.left=(rcArce.Width()-SizeRestrict.cx)/2; m_rcNormalSize.right=m_rcNormalSize.left+SizeRestrict.cx; m_rcNormalSize.bottom=m_rcNormalSize.top+SizeRestrict.cy; SetWindowPos(NULL,m_rcNormalSize.left,m_rcNormalSize.top,m_rcNormalSize.Width(),m_rcNormalSize.Height(),SWP_NOZORDER); //创建视图 ASSERT(m_pIGameFrameView!=NULL); if (m_pIGameFrameView!=NULL) m_pIGameFrameView->CreateGameViewWnd(this,IDC_GAME_CLIENT_VIEW); //动画控件 IUnknownEx * pIUnknownEx=QUERY_ME_INTERFACE(IFlashControlSink); m_FlashControl.CreateControl(this,CRect(0,0,FALSH_MOVIE_CX,FALSH_MOVIE_CY),pIUnknownEx); m_FlashControl.ShowControl(SW_HIDE); //设置控件 m_btControl.SetParent(&m_SkinSplitter); m_SkinSplitter.SetSplitterEvent(this); m_SkinSplitter.SetSplitterType(SplitterType_Vor); m_SkinSplitter.SetSplitterColor(RGB(165,113,0)); //注册接口 m_pIClientKernel->SetClientPropertySink(QUERY_ME_INTERFACE(IClientPropertySink)); //显示窗口 //MaxSizeWindow(); //设置滚动 m_SkinScrollBar.InitScroolBar(this); return 0L; }
//启动服务 bool __cdecl CTCPNetworkEngine::StartService() { DWORD i = 0; //效验状态 if (m_bService == true) { CTraceService::TraceString(TEXT("网络引擎重复启动,启动操作忽略"), TraceLevel_Warning); return true; } //判断端口 if (m_wListenPort == 0) { CTraceService::TraceString(TEXT("网络引擎监听端口无效"), TraceLevel_Exception); return false; } //绑定对象 if (m_SendQueueService.SetQueueServiceSink(QUERY_ME_INTERFACE(IUnknownEx)) == false) { CTraceService::TraceString(TEXT("网络引擎与触发服务绑定失败"), TraceLevel_Exception); return false; } try { //获取系统信息 SYSTEM_INFO SystemInfo; GetSystemInfo(&SystemInfo); DWORD dwThreadCount = SystemInfo.dwNumberOfProcessors; //建立完成端口 m_hCompletionPort = CreateIoCompletionPort(INVALID_HANDLE_VALUE, NULL, NULL, SystemInfo.dwNumberOfProcessors); if (m_hCompletionPort == NULL) throw TEXT("网络引擎完成端口创建失败"); //建立监听SOCKET struct sockaddr_in SocketAddr; memset(&SocketAddr, 0, sizeof(SocketAddr)); SocketAddr.sin_addr.s_addr = INADDR_ANY; SocketAddr.sin_family = AF_INET; SocketAddr.sin_port = htons(m_wListenPort); m_hServerSocket = WSASocket(AF_INET, SOCK_STREAM, IPPROTO_TCP, NULL, 0, WSA_FLAG_OVERLAPPED); if (m_hServerSocket == INVALID_SOCKET) throw TEXT("网络引擎监听 SOCKET 创建失败"); int iErrorCode = bind(m_hServerSocket, (SOCKADDR*) & SocketAddr, sizeof(SocketAddr)); if (iErrorCode == SOCKET_ERROR) throw TEXT("网络引擎监听端口被占用,端口绑定失败"); iErrorCode = listen(m_hServerSocket, 200); if (iErrorCode == SOCKET_ERROR) throw TEXT("网络引擎监听端口被占用,端口监听失败"); //启动发送队列 bool bSuccess = m_SendQueueService.StartService(); if (bSuccess == false) throw TEXT("网络引擎发送队列服务启动失败"); //建立读写线程 for (i = 0; i < dwThreadCount; i++) { CServerSocketRSThread * pServerSocketRSThread = new CServerSocketRSThread(); if (pServerSocketRSThread == NULL) throw TEXT("网络引擎读写线程服务创建失败"); bSuccess = pServerSocketRSThread->InitThread(m_hCompletionPort); if (bSuccess == false) throw TEXT("网络引擎读写线程服务配置失败"); m_SocketRSThreadArray.Add(pServerSocketRSThread); } //建立应答线程 bSuccess = m_SocketAcceptThread.InitThread(m_hCompletionPort, m_hServerSocket, this); if (bSuccess == false) throw TEXT("网络引擎网络监听线程服务配置"); //运行读写线程 for (i = 0; i < dwThreadCount; i++) { CServerSocketRSThread * pServerSocketRSThread = m_SocketRSThreadArray[i]; ASSERT(pServerSocketRSThread != NULL); bSuccess = pServerSocketRSThread->StartThread(); if (bSuccess == false) throw TEXT("网络引擎读写线程服务启动失败"); } //网络检测线程 m_SocketDetectThread.InitThread(this); bSuccess = m_SocketDetectThread.StartThread(); if (bSuccess == false) throw TEXT("网络引检测线程服务启动失败"); //运行应答线程 bSuccess = m_SocketAcceptThread.StartThread(); if (bSuccess == false) throw TEXT("网络引擎监听线程服务启动失败"); //设置变量 m_bService = true; } catch (LPCTSTR pszError) { CTraceService::TraceString(pszError, TraceLevel_Exception); return false; } return true; }
//内核配置 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; }
//构造函数 CCompanionManager::CCompanionManager(void) { m_bNeedUpdate=false; m_DlgCompanionManager.SetCompanionManager(QUERY_ME_INTERFACE(IUnknownEx)); return; }