//更新标题 void CClientKernel::UpdateGameTitle() { //变量定义 TCHAR szTitle[128]=TEXT(""); //获取文件 TCHAR szProcessName[MAX_PATH]=TEXT(""); GetModuleFileName(AfxGetInstanceHandle(),szProcessName,CountArray(szProcessName)); //获取信息 CWinFileInfo WinFileInfo; WinFileInfo.OpenWinFile(szProcessName); //构造标题 if ((m_ServerAttribute.szServerName[0]!=0)&&(m_wChairID!=INVALID_CHAIR)) { _sntprintf(szTitle,CountArray(szTitle),TEXT("%s [ %s - 第 %d 桌 ]"),WinFileInfo.GetProductName(),m_ServerAttribute.szServerName,m_wTableID+1); } else { _sntprintf(szTitle,CountArray(szTitle),TEXT("%s - [ Ver:%s ]"),WinFileInfo.GetProductName(),WinFileInfo.GetProductVersion()); } //设置标题 AfxGetMainWnd()->SetWindowText(szTitle); return; }
//更新类型 bool CServerListManager::UpdateGameKind(WORD wKindID) { CListKind * pListKind=SearchKindItem(wKindID); if (pListKind!=NULL) { CWinFileInfo WinFileInfo; tagGameKind * pGameKind=pListKind->GetItemInfo(); pListKind->m_bInstall=WinFileInfo.OpenWinFile(pGameKind->szProcessName); m_pIServerListSink->OnListItemUpdate(pListKind); return true; } return false; }
//插入子项 bool CServerListManager::InsertKindItem(tagGameKind GameKind[], WORD wCount) { CListKind * pListKind=NULL; try { //变量定义 WORD wTypeID=0; CListType * pListType=NULL; CListKind * pListKindTemp=NULL; for (WORD i=0;i<wCount;i++) { // 如果是工具箱不插入 if(GameKind[i].wKindID == TOOLBOX_KINDID) { CopyMemory(m_szToolName,GameKind[i].szProcessName,sizeof(m_szToolName)); continue; } //寻找父项 if ((pListType==NULL)||(GameKind[i].wTypeID!=wTypeID)) { wTypeID=GameKind[i].wTypeID; pListType=SearchTypeItem(wTypeID); ASSERT(pListType!=NULL); if (pListType==NULL) continue; } //查找存在 pListKindTemp=pListType->SearchKindItem(GameKind[i].wKindID); if (pListKindTemp!=NULL) continue; //插入操作 CWinFileInfo WinFileInfo; pListKind=new CListKind(pListType); CopyMemory(pListKind->GetItemInfo(),&GameKind[i],sizeof(tagGameKind)); pListKind->m_bInstall=WinFileInfo.OpenWinFile(GameKind[i].szProcessName); m_PtrArrayKind.Add(pListKind); m_pIServerListSink->OnListItemInserted(pListKind); } return true; } catch (...) { SafeDelete(pListKind); } return false; }
//进入房间 CRoomViewItem * CGameFrame::CreateRoomViewItem(CListServer * pListServer) { //判断状态 tagGlobalUserData & GlobalUserData=g_GlobalUnits.GetGolbalUserData(); if (GlobalUserData.dwUserID==0L) { ShowMessageBox(TEXT("你还没有登录,请先登录游戏广场!"),MB_ICONQUESTION); return NULL; } //效验参数 ASSERT(pListServer!=NULL); CListKind * pListKind=pListServer->GetListKind(); tagGameKind * pGameKind=pListKind->GetItemInfo(); tagGameServer * pGameServer=pListServer->GetItemInfo(); //判断连接 if (m_pRoomViewItemCreate!=NULL) { tagGameServer * pGameServerCreate=m_pRoomViewItemCreate->GetServerInfo(); if ((pGameServer->wKindID==pGameServerCreate->wKindID)&& (pGameServer->wServerID==pGameServerCreate->wServerID)) return NULL; } //寻找房间 CRoomViewItem * pRoomViewItem=SearchRoomViewItem(pGameServer->wKindID,pGameServer->wServerID); if (pRoomViewItem!=NULL) { ActiveRoomViewItem(pRoomViewItem); return pRoomViewItem; } //进入房间数目 if (m_pRoomViewItem[CountArray(m_pRoomViewItem)-1]!=NULL) { ShowMessageBox(TEXT("进入的游戏房间太多了,请关闭部分游戏房间再试!"),MB_ICONINFORMATION); return NULL; } //获取版本 CWinFileInfo WinFileInfo; if (WinFileInfo.OpenWinFile(pGameKind->szProcessName)==false) { TCHAR szBuffer[512]=TEXT(""); _snprintf(szBuffer,sizeof(szBuffer),TEXT("【%s】还没有安装,现在是否下载?"),pGameKind->szKindName); int nResult=ShowMessageBox(szBuffer,MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON1); if (nResult==IDYES) g_GlobalAttemper.DownLoadClient(pGameKind->szKindName,pGameKind->wKindID,true); return NULL; } //获取版本 DWORD dwFileVerMS=0L,dwFileVerLS=0L; WinFileInfo.GetFileVersion(dwFileVerMS,dwFileVerLS); //版本分析 BYTE cbFileVer1=(BYTE)(HIWORD(dwFileVerMS)); BYTE cbFileVer2=(BYTE)(LOWORD(dwFileVerMS)); BYTE cbFileVer3=(BYTE)(HIWORD(dwFileVerLS)); BYTE cbFileVer4=(BYTE)(LOWORD(dwFileVerLS)); BYTE cbListVer1=(BYTE)(LOWORD(LOWORD(pGameKind->dwMaxVersion))); BYTE cbListVer2=(BYTE)(HIBYTE(LOWORD(pGameKind->dwMaxVersion))); BYTE cbListVer3=(BYTE)(LOBYTE(HIWORD(pGameKind->dwMaxVersion))); BYTE cbListVer4=(BYTE)(HIBYTE(HIWORD(pGameKind->dwMaxVersion))); //判断版本 if ((cbFileVer1!=cbListVer1)||(cbFileVer2!=cbListVer2)||(cbFileVer3!=cbListVer3)) { TCHAR szBuffer[512]=TEXT(""); _snprintf(szBuffer,sizeof(szBuffer),TEXT("【%s】已经更新为 %ld.%ld.%ld.%ld 版本,你的版本不能继续使用,现在是否下载?"),pGameKind->szKindName, cbListVer1,cbListVer2,cbListVer3,cbListVer4); int nResult=ShowMessageBox(szBuffer,MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON1); if (nResult==IDYES) g_GlobalAttemper.DownLoadClient(pGameKind->szKindName,pGameKind->wKindID,true); return NULL; } //兼容版本 if (cbFileVer4!=cbListVer4) { TCHAR szBuffer[512]=TEXT(""); _snprintf(szBuffer,sizeof(szBuffer),TEXT("【%s】已经更新为 %ld.%ld.%ld.%ld 版本,现在是否下载升级?"),pGameKind->szKindName, cbListVer1,cbListVer2,cbListVer3,cbListVer4); int nResult=ShowMessageBox(szBuffer,MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON1); if (nResult==IDYES) { g_GlobalAttemper.DownLoadClient(pGameKind->szKindName,pGameKind->wKindID,true); return NULL; } } //创建房间 try { pRoomViewItem=new CRoomViewItem; if (pRoomViewItem==NULL) return NULL; pRoomViewItem->Create(IDD_GAME_ROOM,AfxGetMainWnd()); if (pRoomViewItem->InitRoomViewItem(pListServer)==false) throw TEXT("游戏房间初始化失败!"); } catch (...) { SafeDelete(pRoomViewItem); } if (pRoomViewItem==NULL) { ShowMessageBox(TEXT("游戏房间创建失败"),MB_ICONQUESTION); return NULL; } //连接游戏 bool bSuccess=pRoomViewItem->ConnectGameServer(); if (bSuccess==false) { pRoomViewItem->DestroyWindow(); SafeDelete(pRoomViewItem); return NULL; } //设置变量 m_pRoomViewItemCreate=pRoomViewItem; //设置提示 CString strBuffer; strBuffer.Format(TEXT("正在连接房间,请稍候...")); g_GlobalAttemper.ShowStatusMessage(strBuffer,pRoomViewItem); return m_pRoomViewItemCreate; }