void CServiceManage::ClearRoomTWRecode(int iRoomID) { HANDLE hDatabase=sqlAddConnection("BZGameLocal.BCF"); if(hDatabase<(HANDLE)0x1000) return; HANDLE hRecord=sqlSPSetName(hDatabase,"SP_GetGameServerList",true); if(hRecord<(HANDLE)0x1000) return; sqlCloseRecord(hDatabase, hRecord); sqlSPClose(hDatabase, hRecord); hRecord=sqlSPSetName(hDatabase,"SP_ClearRoomTWLoginRecord"); if(hRecord>=(HANDLE)0x1000) { sqlSPAddPara(hDatabase,hRecord,"@RoomID", iRoomID); sqlSPExec(hDatabase,hRecord); sqlCloseRecord(hDatabase, hRecord); sqlSPClose(hDatabase, hRecord); } sqlCloseConnection(hDatabase); }
////修改一条组件记录在ServerDllInfo表中 bool CServiceManage::ModifCom(CListCtrl * pListCtrl,SC_ServiceInfoStruct * avantp,SC_ServiceInfoStruct pServiceInfo) { HANDLE hDatabase=sqlAddConnection("BZGameLocal.BCF"); if(hDatabase<(HANDLE)0x1000) return false; HANDLE hRecord=sqlSPSetName(hDatabase,"SP_EditGameServer",true); if(hRecord<(HANDLE)0x1000) { sqlSPClose(hDatabase,hRecord); return false; } sqlSPAddPara(hDatabase,hRecord,"@ServerInfoID",pServiceInfo.uServiceID); sqlSPAddPara(hDatabase,hRecord,"@NameID",pServiceInfo.ServiceInfo.uNameID); sqlSPAddPara(hDatabase,hRecord,"@DeskPeople",pServiceInfo.ServiceInfo.uDeskPeople); sqlSPAddPara(hDatabase,hRecord,"@SuppoerType",pServiceInfo.ServiceInfo.uSupportType); sqlSPAddPara(hDatabase,hRecord,"@ServerVer",pServiceInfo.ServiceInfo.uServiceVer); sqlSPAddPara(hDatabase,hRecord,"@GameName",pServiceInfo.ServiceInfo.szGameName,sizeof(pServiceInfo.ServiceInfo.szGameName)); sqlSPAddPara(hDatabase,hRecord,"@GameTable",pServiceInfo.ServiceInfo.szGameTable,sizeof(pServiceInfo.ServiceInfo.szGameTable)); sqlSPAddPara(hDatabase,hRecord,"@DllFileName",pServiceInfo.ServiceInfo.szDLLFileName,sizeof(pServiceInfo.ServiceInfo.szDLLFileName)); sqlSPExec(hDatabase,hRecord); int ret=sqlSPGetReturnValue(hDatabase,hRecord); sqlCloseConnection(hDatabase); //使无重复ID if (ret==1) { if (m_pIMessage!=NULL) m_pIMessage->ShowMessage("ServerDllInfo 表中无此ServerInfoID相同的组件,请刷新组件! "); //AfxMessageBox("ServerDllInfo 表中无此ServerInfoID相同的组件,请刷新组件! "); return false; } for(int i=0;i<= m_ServiceInfo.GetUpperBound();i++) { SC_ServiceInfoStruct *p; p = (SC_ServiceInfoStruct *) m_ServiceInfo.GetAt(i); if(p->uServiceID==pServiceInfo.uServiceID) { m_ServiceInfo.RemoveAt(i);//删除旧的记录(要么?) break; } } m_ServiceInfo.Add(&pServiceInfo);//同时把新的组件加到m_ServiceInfo中 UpdateComDLLList(pListCtrl); return true; }
// 删除数据库房间信息 bool CServiceManage::DeleteGameRoomInfo(SC_GameRoomInitStruct * pComRoomInfo) { try { HANDLE hDatabase=sqlAddConnection("BZGameLocal.bcf"); if(hDatabase<(HANDLE)0x1000) { return false; } HANDLE hRecord=sqlSPSetName(hDatabase,"SP_EraseRoomInfo"); if(hRecord<(HANDLE)0x1000) { sqlSPClose(hDatabase,hRecord); return false; } sqlSPAddPara(hDatabase,hRecord,"@RoomID",pComRoomInfo->InitInfo.uRoomID); sqlSPExec(hDatabase,hRecord); sqlCloseConnection(hDatabase); SC_GameRoomInitStruct *p; for(int i = 0;i<=m_ComRoomInfo.GetUpperBound();i++) { p=(SC_GameRoomInitStruct *)m_ComRoomInfo.GetAt(i); if(p->uServiceID==pComRoomInfo->uServiceID && p->InitInfo.szGameRoomName==pComRoomInfo->InitInfo.szGameRoomName) { m_ComRoomInfo.RemoveAt(i); break; } } if (m_pIMessage!=NULL) m_pIMessage->ShowMessage(TEXT("删除组件的子实例信息完成!")); return true; } catch (...) { TRACE("CATCH:%s with %s\n",__FILE__,__FUNCTION__); if (m_pIMessage!=NULL) m_pIMessage->ShowMessage(TEXT("删除组件的子实例信息发生错误,稍后再次尝试...")); } return false; }
//增加一条组件记录在ServerDllInfo表中,同时把新的组件加到m_ServiceInfo中 bool CServiceManage::SetupCom(CListCtrl * pListCtrl,SC_ServiceInfoStruct pServiceInfo) { HANDLE hDatabase=sqlAddConnection("BZGameLocal.BCF"); if(hDatabase<(HANDLE)0x1000) { return false; } HANDLE hRecord=sqlSPSetName(hDatabase,"SP_AddGameServer",true); if(hRecord<(HANDLE)0x1000) { sqlSPClose(hDatabase,hRecord); return false; } sqlSPAddPara(hDatabase,hRecord,"@ServerInfoID",pServiceInfo.uServiceID); sqlSPAddPara(hDatabase,hRecord,"@NameID",pServiceInfo.ServiceInfo.uNameID); sqlSPAddPara(hDatabase,hRecord,"@DeskPeople",pServiceInfo.ServiceInfo.uDeskPeople); sqlSPAddPara(hDatabase,hRecord,"@SuppoerType",pServiceInfo.ServiceInfo.uSupportType); sqlSPAddPara(hDatabase,hRecord,"@ServerVer",pServiceInfo.ServiceInfo.uServiceVer); sqlSPAddPara(hDatabase,hRecord,"@GameName",pServiceInfo.ServiceInfo.szGameName,sizeof(pServiceInfo.ServiceInfo.szGameName)); sqlSPAddPara(hDatabase,hRecord,"@GameTable",pServiceInfo.ServiceInfo.szGameTable,sizeof(pServiceInfo.ServiceInfo.szGameTable)); sqlSPAddPara(hDatabase,hRecord,"@DllFileName",pServiceInfo.ServiceInfo.szDLLFileName,sizeof(pServiceInfo.ServiceInfo.szDLLFileName)); sqlSPExec(hDatabase,hRecord); int ret=sqlSPGetReturnValue(hDatabase,hRecord); sqlCloseConnection(hDatabase); if(ret==1) { if (m_pIMessage!=NULL) m_pIMessage->ShowMessage("不能新建和现有组件ServerInfoID相同的组件,请重新填写! :-) ");//AfxMessageBox("不能新建和现有组件ServerInfoID相同的组件,请重新填写! :-) "); return false; } m_ServiceInfo.Add(&pServiceInfo);//同时把新的组件加到m_ServiceInfo中 UpdateComDLLList(pListCtrl); return true; }
//更新游戏列表 bool CServerGameListManage0::UpdateGameListBuffer(HANDLE hDatabase) { //try //{ //读取游戏类型列表 HANDLE hRecord=sqlSPSetName(hDatabase,"SP_GetGameKind"); if(hRecord<(HANDLE)0x1000) return false; if(!sqlSPExec(hDatabase,hRecord,true)) return false; DWORD dwReadKindCount=(DWORD)sqlGetRecordCount(hDatabase,hRecord); if (dwReadKindCount>m_dwKindBufCount) { delete [] m_pKindPtr; m_pKindPtr=new ComKindInfo [dwReadKindCount]; if (m_pKindPtr==NULL) { sqlSPClose(hDatabase,hRecord); // zxj dfw 2009-11-12 return false; } m_dwKindBufCount=dwReadKindCount; } //读取数据库获取游戏类型 ComKindInfo KindRead; KindRead.Head.uSize=sizeof(KindRead); KindRead.Head.bDataType=GLK_GAME_KIND; m_dwKindCount=dwReadKindCount; int iCount=0; while(!sqlEndOfFile(hDatabase,hRecord)) { sqlGetValue(hDatabase,hRecord,TEXT("KindID"),KindRead.uKindID); sqlGetValue(hDatabase,hRecord,TEXT("KindName"),KindRead.szKindName,sizeof(KindRead.szKindName)); // duanxiaohui 20111107 sqlGetValue(hDatabase,hRecord,TEXT("ParentKindID"),KindRead.uParentKindID); // end duanxiaohui *(m_pKindPtr+(iCount++))=KindRead; sqlMoveNext(hDatabase,hRecord); } sqlSPClose(hDatabase,hRecord); //读取名字信息 hRecord=sqlSPSetName(hDatabase,"SP_GetGameName"); if(hRecord<(HANDLE)0x1000) return false; if(!sqlSPExec(hDatabase,hRecord,true)) return false; DWORD dwReadNameCount=(DWORD)sqlGetRecordCount(hDatabase,hRecord); if (dwReadNameCount>m_dwNameBufCount) { delete [] m_pNamePtr; m_pNamePtr=new ComNameInfo [dwReadNameCount]; if (m_pNamePtr==NULL) { sqlSPClose(hDatabase,hRecord); // zxj dfw 2009-11-12 return false; } m_dwNameBufCount=dwReadNameCount; } //读取数据库 ComNameInfo NameRead; NameRead.Head.uSize=sizeof(NameRead); NameRead.Head.bDataType=GLK_GAME_NAME; m_dwNameCount=dwReadNameCount; iCount=0; while(!sqlEndOfFile(hDatabase,hRecord)) { sqlGetValue(hDatabase,hRecord,TEXT("KindID"),NameRead.uKindID); sqlGetValue(hDatabase,hRecord,TEXT("NameID"),NameRead.uNameID); sqlGetValue(hDatabase,hRecord,TEXT("ComName"),NameRead.szGameName,sizeof(NameRead.szGameName)); sqlGetValue(hDatabase,hRecord,TEXT("ComProcess"),NameRead.szGameProcess,sizeof(NameRead.szGameProcess)); *(m_pNamePtr+(iCount++))=NameRead; sqlMoveNext(hDatabase,hRecord); TRACE("SP_GetGameName: %d %d %s %s\n",NameRead.uKindID,NameRead.uNameID,NameRead.szGameName,NameRead.szGameProcess); } sqlSPClose(hDatabase,hRecord); //读取房间信息 hRecord=sqlSPSetName(hDatabase,"SP_GetOnlineRoom"); if(hRecord<(HANDLE)0x1000) return false; if(!sqlSPExec(hDatabase,hRecord,true)) return false; DWORD dwReadRoomCount=(DWORD)sqlGetRecordCount(hDatabase,hRecord); bool bNew=false; if (dwReadRoomCount>m_dwRoomBufCount) { delete [] m_pRoomPtr; m_pRoomPtr=new ComRoomInfo [dwReadRoomCount]; if (m_pRoomPtr==NULL) { sqlSPClose(hDatabase,hRecord); // zxj dfw 2009-11-12 throw DTR_GP_ERROR_UNKNOW; } m_dwRoomBufCount=dwReadRoomCount; bNew=true; } //读取数据库 ComRoomInfo RoomRead; RoomRead.Head.uSize=sizeof(RoomRead); RoomRead.Head.bDataType=GLK_GAME_ROOM; m_dwRoomCount=dwReadRoomCount; iCount=0; bool b=false; while(!sqlEndOfFile(hDatabase,hRecord)) { b=sqlGetValue(hDatabase,hRecord,TEXT("GameKindID"),RoomRead.uKindID); b=sqlGetValue(hDatabase,hRecord,TEXT("GameNameID"),RoomRead.uNameID); b=sqlGetValue(hDatabase,hRecord,TEXT("RoomID"),RoomRead.uRoomID); b=sqlGetValue(hDatabase,hRecord,TEXT("GameTypeID"),RoomRead.uComType); if(bNew) RoomRead.uPeopleCount=0; //sqlGetValue(hDatabase,hRecord,TEXT("OnLineCount"),RoomRead.uPeopleCount); b=sqlGetValue(hDatabase,hRecord,TEXT("VirtualUser"),RoomRead.uVirtualUser);//20081211 , Fred Huang RoomRead.uPeopleCount+=RoomRead.uVirtualUser;//20081211 , Fred Huang b=sqlGetValue(hDatabase,hRecord,TEXT("VirtualGameTime"),RoomRead.uVirtualGameTime);//20081211 , Fred Huang b=sqlGetValue(hDatabase,hRecord,TEXT("RoomRule"),RoomRead.dwRoomRule);//20081211 , Fred Huang b=sqlGetValue(hDatabase,hRecord,TEXT("SocketPort"),RoomRead.uServicePort); b=sqlGetValue(hDatabase,hRecord,TEXT("DeskPeople"),RoomRead.uDeskPeople); b=sqlGetValue(hDatabase,hRecord,TEXT("DeskCount"),RoomRead.uDeskCount); b=sqlGetValue(hDatabase,hRecord,TEXT("ServerIP"),RoomRead.szServiceIP,sizeof(RoomRead.szServiceIP)); //wushuqun 2009.6.5 //混战场房间名称 --begin b=sqlGetValue(hDatabase,hRecord,TEXT("BattleRoomID"),RoomRead.uBattleRoomID); b=sqlGetValue(hDatabase,hRecord,TEXT("BattleMatchTable"),RoomRead.szBattleGameTable,sizeof(RoomRead.szBattleGameTable)); RoomRead.i64TimeStart = 0; RoomRead.i64TimeEnd = 0; if (RoomRead.dwRoomRule & GRR_CONTEST) { int nYear = 0, nMonth = 0, nDate = 0, nHour = 0, nMin = 0, nSec = 0, nss = 0; CString temp; sqlGetValue(hDatabase, hRecord, TEXT("StartTime"), temp); if (temp != "") { sscanf(temp.GetBuffer(), TEXT("%d-%d-%d %d:%d:%d.%d"), &nYear, &nMonth, &nDate, &nHour, &nMin, &nSec, &nss); CTime _t(nYear, nMonth, nDate, nHour, nMin, nSec); RoomRead.i64TimeStart = _t.GetTime(); } else { RoomRead.i64TimeStart = 0; } sqlGetValue(hDatabase, hRecord, TEXT("EndTime"), temp); if (temp != "") { sscanf(temp.GetBuffer(), TEXT("%d-%d-%d %d:%d:%d.%d"), &nYear, &nMonth, &nDate, &nHour, &nMin, &nSec, &nss); CTime _t(nYear, nMonth, nDate, nHour, nMin, nSec); RoomRead.i64TimeEnd = _t.GetTime(); } else { RoomRead.i64TimeEnd = 0; } sqlGetValue(hDatabase, hRecord, TEXT("ContestID"), RoomRead.iContestID); } char szRoomName[61]; memset(szRoomName,0,sizeof(szRoomName)); if (RoomRead.uBattleRoomID > 0) { HANDLE hRecordTmp=sqlSPSetName(hDatabase,"SP_GetBattleRoomName"); sqlSPAddPara(hDatabase,hRecordTmp,"@BattleRoomID",RoomRead.uBattleRoomID); sqlSPExec(hDatabase,hRecordTmp,true); sqlGetValue(hDatabase,hRecordTmp,TEXT("RoomName"),szRoomName,sizeof(szRoomName)); sqlSPClose(hDatabase,hRecordTmp); // zxj dfw 2009-11-12 } else { sqlGetValue(hDatabase,hRecord,TEXT("RoomName"),szRoomName,sizeof(szRoomName)); } memcpy(RoomRead.szGameRoomName,szRoomName,sizeof(szRoomName)); //--end int iVIPRoom = 0; b=sqlGetValue(hDatabase,hRecord,TEXT("VIPRoom"),iVIPRoom); RoomRead.bVIPRoom = (iVIPRoom!=0); b=sqlGetValue(hDatabase,hRecord,TEXT("Version"),RoomRead.uVer); //{{Add by lxl 20101008 判断该房间是否具有密码 char szPassWord[61]; memset(szPassWord, 0, sizeof(szPassWord)); b=sqlGetValue(hDatabase,hRecord,TEXT("RoomPassword"), szPassWord, sizeof(szPassWord)); if (strlen(szPassWord)>10) // MD5密码一定有16字节以上,如果没这么多,表示是个无效的字符串 { RoomRead.bHasPassword = true; } else { RoomRead.bHasPassword = false; } //租赁房间ID与时间 sqlGetValue(hDatabase,hRecord,TEXT("tenancyID"), RoomRead.iLeaseID); if (RoomRead.iLeaseID != 0) { int nYear = 0, nMonth = 0, nDate = 0, nHour = 0, nMin = 0, nSec = 0, nss = 0; CString temp; sqlGetValue(hDatabase, hRecord, TEXT("OpenRoomDate"), temp); if (temp != "") { sscanf(temp.GetBuffer(), TEXT("%d-%d-%d %d:%d:%d.%d"), &nYear, &nMonth, &nDate, &nHour, &nMin, &nSec, &nss); CTime _t(nYear, nMonth, nDate, nHour, nMin, nSec); RoomRead.i64LeaseTimeStart = _t.GetTime(); } else { RoomRead.i64LeaseTimeStart = 0; } int idays = 0; sqlGetValue(hDatabase,hRecord,TEXT("AppleyDays"),idays); RoomRead.i64LeaseTimeEnd = RoomRead.i64LeaseTimeStart + idays * 24 * 60 * 60; } *(m_pRoomPtr+(iCount++))=RoomRead; sqlMoveNext(hDatabase,hRecord); } sqlSPClose(hDatabase,hRecord); return true; }
//更新组件列表 bool CServiceManage::UpdateComDLLList(CListCtrl * pListCtrl) { HANDLE hDatabase=sqlAddConnection("BZGameLocal.BCF"); if(hDatabase<(HANDLE)0x1000) { return false; } HANDLE hRecord=sqlSPSetName(hDatabase,"SP_GetGameServerList",true); if(hRecord<(HANDLE)0x1000) { sqlSPClose(hDatabase,hRecord); return false; } sqlSPExec(hDatabase,hRecord,true); //写入数据前应清空记录 pListCtrl->DeleteAllItems(); m_ServiceInfo.RemoveAll(); //读取资料 TCHAR szBuffer[50]; while(!sqlEndOfFile(hDatabase,hRecord)) { //定义变量 SC_ServiceInfoStruct * pServiceInfo=new SC_ServiceInfoStruct; memset(pServiceInfo,0,sizeof(SC_ServiceInfoStruct)); m_ServiceInfo.Add(pServiceInfo); //读取数据 sqlGetValue(hDatabase,hRecord,TEXT("ServerInfoID"),pServiceInfo->uServiceID); sqlGetValue(hDatabase,hRecord,TEXT("NameID"),pServiceInfo->ServiceInfo.uNameID); sqlGetValue(hDatabase,hRecord,TEXT("DeskPeople"),pServiceInfo->ServiceInfo.uDeskPeople); sqlGetValue(hDatabase,hRecord,TEXT("SupportType"),pServiceInfo->ServiceInfo.uSupportType); sqlGetValue(hDatabase,hRecord,TEXT("ServiceVer"),pServiceInfo->ServiceInfo.uServiceVer); sqlGetValue(hDatabase,hRecord,TEXT("GameName"),pServiceInfo->ServiceInfo.szGameName,sizeof(pServiceInfo->ServiceInfo.szGameName)); sqlGetValue(hDatabase,hRecord,TEXT("GameTable"),pServiceInfo->ServiceInfo.szGameTable,sizeof(pServiceInfo->ServiceInfo.szGameTable)); sqlGetValue(hDatabase,hRecord,TEXT("DLLFileName"),pServiceInfo->ServiceInfo.szDLLFileName,sizeof(pServiceInfo->ServiceInfo.szDLLFileName)); //sqlGetValue(hDatabase,hRecord,TEXT("Writer"),pServiceInfo->ServiceInfo.szWriter,sizeof(pServiceInfo->ServiceInfo.szWriter)); //sqlGetValue(hDatabase,hRecord,TEXT("DllNote"),pServiceInfo->ServiceInfo.szDllNote,sizeof(pServiceInfo->ServiceInfo.szDllNote)); // PengJiLin, 2011-4-2, 指定哪些游戏是可用的 if(FALSE == m_GameSelecter.GameIsUsable(pServiceInfo->ServiceInfo.uNameID)) { memset(pServiceInfo,0,sizeof(SC_ServiceInfoStruct)); sqlMoveNext(hDatabase,hRecord); continue; } //写入数据 struct stat FileStat; int iItem=pListCtrl->InsertItem(pListCtrl->GetItemCount(),ltoa(pServiceInfo->uServiceID,szBuffer,10)); pListCtrl->SetItem(iItem,1,1,pServiceInfo->ServiceInfo.szGameName,0,0,0,0); if (stat(pServiceInfo->ServiceInfo.szDLLFileName,&FileStat)==0) { pListCtrl->SetItem(iItem,2,1,TEXT("已安装"),0,0,0,0); pServiceInfo->uServiceStation = 1; } else { pListCtrl->SetItem(iItem,2,1,TEXT("未安装"),0,0,0,0); pServiceInfo->uServiceStation = 0; } pListCtrl->SetItem(iItem,3,1,ltoa(pServiceInfo->ServiceInfo.uServiceVer,szBuffer,10),0,0,0,0); pListCtrl->SetItem(iItem,4,1,ltoa(pServiceInfo->ServiceInfo.uDeskPeople,szBuffer,10),0,0,0,0); pListCtrl->SetItem(iItem,5,1,pServiceInfo->ServiceInfo.szGameTable,0,0,0,0); pListCtrl->SetItem(iItem,6,1,pServiceInfo->ServiceInfo.szDLLFileName,0,0,0,0); //pListCtrl->SetItem(iItem,7,1,pServiceInfo->ServiceInfo.szDllNote,0,0,0,0); pListCtrl->SetItemData(iItem,(DWORD_PTR)pServiceInfo); //pList->SendMessage(LVM_SETEXTENDEDLISTVIEWSTYLE,LVS_EX_FULLROWSELECT,LVS_EX_FULLROWSELECT); //pList->InsertColumn(0,TEXT("组件 ID"),LVCFMT_LEFT,60); //pList->InsertColumn(1,TEXT("组件名字"),LVCFMT_LEFT,100); //pList->InsertColumn(2,TEXT("组件状态"),LVCFMT_LEFT,80); //pList->InsertColumn(3,TEXT("版本号码"),LVCFMT_LEFT,60); //pList->InsertColumn(4,TEXT("游戏人数"),LVCFMT_LEFT,60); //pList->InsertColumn(5,TEXT("默认信息表"),LVCFMT_LEFT,100); //pList->InsertColumn(6,TEXT("模块名字"),LVCFMT_LEFT,150); sqlMoveNext(hDatabase,hRecord); } // PengJiLin, 2011-4-21, 清 TWLoginRecord 相关内容,避免崩溃后无法登陆 sqlCloseRecord(hDatabase, hRecord); sqlSPClose(hDatabase, hRecord); hRecord=sqlSPSetName(hDatabase,"SP_ClearTWLoginRecord"); if(hRecord>=(HANDLE)0x1000) { sqlSPAddPara(hDatabase,hRecord,"@ServiceName",m_ServiceName,m_ServiceName.GetLength()); sqlSPExec(hDatabase,hRecord); sqlCloseRecord(hDatabase, hRecord); sqlSPClose(hDatabase, hRecord); } sqlCloseConnection(hDatabase); return true; }