#include "StdAfx.h" #include "GlobalInfoManager.h" #include "AttemperEngineSink.h" ////////////////////////////////////////////////////////////////////////////////// //构造函数 CGlobalUserItem::CGlobalUserItem() { //用户属性 m_dwUserID = 0L; m_dwGameID = 0L; //等级信息 m_cbMemberOrder = 0; m_cbMasterOrder = 0; //链表属性 m_pNextUserItemPtr = NULL; m_ServerID = 0; IsPlaying = false; //是否在桌子里打牌 return; } //析构函数 CGlobalUserItem::~CGlobalUserItem() { } //枚举房间 CGlobalServerItem * CGlobalUserItem::EnumServerItem(WORD wIndex) { if (wIndex >= m_GlobalServerItemArray.GetCount()) return NULL; return m_GlobalServerItemArray[wIndex]; } ////////////////////////////////////////////////////////////////////////////////// //构造函数 CGlobalPlazaItem::CGlobalPlazaItem() { //设置变量 m_wIndex = 0; ZeroMemory(&m_GamePlaza, sizeof(m_GamePlaza)); //链表属性 m_pNextPlazaItemPtr = NULL; return; } //析构函数 CGlobalPlazaItem::~CGlobalPlazaItem() { } ////////////////////////////////////////////////////////////////////////////////// //构造函数 CGlobalServerItem::CGlobalServerItem() { //设置变量 m_wIndex = 0; ZeroMemory(&m_GameServer, sizeof(m_GameServer)); ZeroMemory(&m_GameMatch, sizeof(m_GameMatch)); //链表属性 m_pNextServerItemPtr = NULL; //设置质数 m_MapUserID.InitHashTable(PRIME_SERVER_USER); return; } //析构函数 CGlobalServerItem::~CGlobalServerItem() { } //寻找用户 CGlobalUserItem * CGlobalServerItem::SearchUserItem(DWORD dwUserID) { //搜索用户 CGlobalUserItem * pGlobalUserItem = NULL; m_MapUserID.Lookup(dwUserID, pGlobalUserItem); return pGlobalUserItem; } ////////////////////////////////////////////////////////////////////////////////// //构造函数 CGlobalInfoManager::CGlobalInfoManager() { //存储变量 m_pGlobalUserItem = NULL; m_pGlobalPlazaItem = NULL; m_pGlobalServerItem = NULL; m_pCAttemperEngineSink = NULL; //设置索引 m_MapPlazaID.InitHashTable(PRIME_SERVER); m_MapServerID.InitHashTable(PRIME_SERVER); m_MapUserID.InitHashTable(PRIME_PLATFORM_USER); m_MapGameID.InitHashTable(PRIME_PLATFORM_USER); //m_MapNickName.InitHashTable(PRIME_PLATFORM_USER); m_RoomList.InitHashTable(PRIME_PLATFORM_USER); m_PrivateRoom.InitHashTable(PRIME_PLATFORM_USER); return; } //析构函数 CGlobalInfoManager::~CGlobalInfoManager() { //删除用户 DWORD dwUserID = 0L; CGlobalUserItem * pGlobalUserItem = NULL; POSITION Position = m_MapUserID.GetStartPosition(); while (Position != NULL) { m_MapUserID.GetNextAssoc(Position, dwUserID, pGlobalUserItem); SafeDelete(pGlobalUserItem); } m_MapUserID.RemoveAll(); //删除广场 WORD wPlazaID = 0; CGlobalPlazaItem * pGlobalPlazaItem = NULL; Position = m_MapPlazaID.GetStartPosition(); while (Position != NULL) { m_MapPlazaID.GetNextAssoc(Position, wPlazaID, pGlobalPlazaItem); SafeDelete(pGlobalPlazaItem); } m_MapPlazaID.RemoveAll(); //删除房间 WORD wServerID = 0; CGlobalServerItem * pGlobalServerItem = NULL; Position = m_MapServerID.GetStartPosition(); while (Position != NULL) { m_MapServerID.GetNextAssoc(Position, wServerID, pGlobalServerItem); SafeDelete(pGlobalServerItem); } m_MapServerID.RemoveAll(); //删除用户 while (m_pGlobalUserItem != NULL) { pGlobalUserItem = m_pGlobalUserItem; m_pGlobalUserItem = m_pGlobalUserItem->m_pNextUserItemPtr; SafeDelete(pGlobalUserItem); } //删除广场 while (m_pGlobalPlazaItem != NULL) { pGlobalPlazaItem = m_pGlobalPlazaItem; m_pGlobalPlazaItem = m_pGlobalPlazaItem->m_pNextPlazaItemPtr; SafeDelete(pGlobalPlazaItem); } //删除房间 while (m_pGlobalServerItem != NULL) { pGlobalServerItem = m_pGlobalServerItem; m_pGlobalServerItem = m_pGlobalServerItem->m_pNextServerItemPtr; SafeDelete(pGlobalServerItem); } m_PrivateRoom.RemoveAll(); m_RoomList.RemoveAll(); return; } //重置数据 VOID CGlobalInfoManager::ResetData() { //删除用户 DWORD dwUserID = 0L; CGlobalUserItem * pGlobalUserItem = NULL; POSITION Position = m_MapUserID.GetStartPosition(); //删除用户 while (Position != NULL) { m_MapUserID.GetNextAssoc(Position, dwUserID, pGlobalUserItem); if (pGlobalUserItem != NULL) FreeGlobalUserItem(pGlobalUserItem); } //删除广场 WORD wPlazaID = 0; CGlobalPlazaItem * pGlobalPlazaItem = NULL; Position = m_MapPlazaID.GetStartPosition(); //删除广场 while (Position != NULL) { m_MapPlazaID.GetNextAssoc(Position, wPlazaID, pGlobalPlazaItem); if (pGlobalPlazaItem != NULL) FreeGlobalPlazaItem(pGlobalPlazaItem); } //删除房间 WORD wServerID = 0; CGlobalServerItem * pGlobalServerItem = NULL; Position = m_MapServerID.GetStartPosition(); //删除房间 while (Position != NULL) { m_MapServerID.GetNextAssoc(Position, wServerID, pGlobalServerItem); if (pGlobalServerItem != NULL) FreeGlobalServerItem(pGlobalServerItem); } //删除索引 m_MapUserID.RemoveAll(); m_MapGameID.RemoveAll(); m_MapPlazaID.RemoveAll(); m_MapServerID.RemoveAll(); //m_MapNickName.RemoveAll(); return; } //删除用户 bool CGlobalInfoManager::DeleteUserItem(DWORD dwUserID, WORD wServerID) { //寻找用户 CGlobalUserItem * pGlobalUserItem = NULL; if (m_MapUserID.Lookup(dwUserID, pGlobalUserItem) == FALSE) { //ASSERT(FALSE); return false; } if (wServerID == pGlobalUserItem->m_ServerID) { pGlobalUserItem->m_ServerID = 0; } //变量定义 CGlobalServerItem * pGlobalServerItem = NULL; INT_PTR nServerCount = pGlobalUserItem->m_GlobalServerItemArray.GetCount(); //退出房间 for (INT_PTR i = 0; i < nServerCount; i++) { //获取房间 pGlobalServerItem = pGlobalUserItem->m_GlobalServerItemArray[i]; //房间判断 if (pGlobalServerItem->GetServerID() == wServerID) { //删除关联 pGlobalServerItem->m_MapUserID.RemoveKey(dwUserID); pGlobalUserItem->m_GlobalServerItemArray.RemoveAt(i); //释放用户 if (pGlobalUserItem->m_GlobalServerItemArray.GetCount() == 0L/* && pGlobalUserItem->GetRoomData().Num == 0*/) { //释放索引 m_MapUserID.RemoveKey(dwUserID); m_MapGameID.RemoveKey(pGlobalUserItem->GetGameID()); // m_MapNickName.RemoveKey(pGlobalUserItem->GetNickName()); //释放对象 FreeGlobalUserItem(pGlobalUserItem); } return true; } } //错误断言 ASSERT(FALSE); return false; } //删除用户 bool CGlobalInfoManager::DeleteUserItem(DWORD dwUserID) { //寻找用户 CGlobalUserItem * pGlobalUserItem = NULL; if (m_MapUserID.Lookup(dwUserID, pGlobalUserItem) == FALSE) { ASSERT(FALSE); return false; } //变量定义 CGlobalServerItem * pGlobalServerItem = NULL; INT_PTR nServerCount = pGlobalUserItem->m_GlobalServerItemArray.GetCount(); //释放用户 if (nServerCount == 0L) { //释放索引 m_MapUserID.RemoveKey(dwUserID); m_MapGameID.RemoveKey(pGlobalUserItem->GetGameID()); //m_MapNickName.RemoveKey(pGlobalUserItem->GetNickName()); //释放对象 FreeGlobalUserItem(pGlobalUserItem); } return true; } //激活用户 int CGlobalInfoManager::ActiveUserItem(tagGlobalUserInfo & GlobalUserInfo, WORD wServerID) { //寻找房间 CGlobalServerItem * pGlobalServerItem = NULL; if (m_MapServerID.Lookup(wServerID, pGlobalServerItem) == FALSE) { return -1; } //寻找用户 CGlobalUserItem * pGlobalUserItem = NULL; if (m_MapUserID.Lookup(GlobalUserInfo.dwUserID, pGlobalUserItem) == FALSE) { //创建用户 pGlobalUserItem = CreateGlobalUserItem(); if (pGlobalUserItem == NULL) { return -2; } //构造昵称 TCHAR szNickName[LEN_NICKNAME] = TEXT(""); //lstrcpyn(szNickName, GlobalUserInfo.szNickName, CountArray(szNickName)); //设置用户 pGlobalUserItem->m_dwUserID = GlobalUserInfo.dwUserID; pGlobalUserItem->m_dwGameID = GlobalUserInfo.dwGameID; //lstrcpyn(pGlobalUserItem->m_szNickName, GlobalUserInfo.szNickName, CountArray(pGlobalUserItem->m_szNickName)); //辅助信息 pGlobalUserItem->m_cbGender = GlobalUserInfo.cbGender; pGlobalUserItem->m_cbMemberOrder = GlobalUserInfo.cbMemberOrder; pGlobalUserItem->m_cbMasterOrder = GlobalUserInfo.cbMasterOrder; //昵称索引 //m_MapNickName[szNickName] = pGlobalUserItem; //设置索引 m_MapUserID[GlobalUserInfo.dwUserID] = pGlobalUserItem; m_MapGameID[GlobalUserInfo.dwGameID] = pGlobalUserItem; } else { //重复判断 for (INT_PTR i = 0; i < pGlobalUserItem->m_GlobalServerItemArray.GetCount(); i++) { if (pGlobalUserItem->m_GlobalServerItemArray[i]->GetServerID() == wServerID) { //原来登陆的游戏节点和现在登陆的游戏节点不一样 if (pGlobalUserItem->m_ServerID != wServerID) { return pGlobalUserItem->m_ServerID; } return 0; } } } pGlobalUserItem->m_ServerID = wServerID; //设置关联 pGlobalUserItem->m_GlobalServerItemArray.Add(pGlobalServerItem); pGlobalServerItem->m_MapUserID[GlobalUserInfo.dwUserID] = pGlobalUserItem; return 0; } //删除广场 bool CGlobalInfoManager::DeletePlazaItem(WORD wPlazaID) { //寻找广场 CGlobalPlazaItem * pGlobalPlazaItem = NULL; if (m_MapPlazaID.Lookup(wPlazaID, pGlobalPlazaItem) == FALSE) { CString cstr = L""; cstr.Format(L"没找到登录服:%d,未removekey", wPlazaID); //提示消息 CTraceService::TraceString(cstr, TraceLevel_Warning); return false; } //释放广场 m_MapPlazaID.RemoveKey(wPlazaID); FreeGlobalPlazaItem(pGlobalPlazaItem); return true; } bool CGlobalInfoManager::DeletePlazaItemByServerID(WORD wServerID) { WORD wPlazaID = 0L; CGlobalPlazaItem * pGlobalPlazaItem = NULL; POSITION Position = m_MapPlazaID.GetStartPosition(); while (Position != NULL) { m_MapPlazaID.GetNextAssoc(Position, wPlazaID, pGlobalPlazaItem); if (pGlobalPlazaItem != NULL) { if (pGlobalPlazaItem->m_GamePlaza.wServerID == wServerID) { break; } } } if (pGlobalPlazaItem != NULL) { //释放广场 m_MapPlazaID.RemoveKey(wPlazaID); FreeGlobalPlazaItem(pGlobalPlazaItem); return true; } return false; } //激活广场 bool CGlobalInfoManager::ActivePlazaItem(WORD wBindIndex, tagGamePlaza & GamePlaza) { //寻找广场 CGlobalPlazaItem * pGlobalPlazaItem = NULL; if (m_MapPlazaID.Lookup(GamePlaza.wPlazaID, pGlobalPlazaItem) == TRUE) { //提示消息 CString cstr = L""; cstr.Format(L"m_MapPlazaID能找到:%d,不需要激活", GamePlaza.wPlazaID); CTraceService::TraceString(cstr, TraceLevel_Warning); //ASSERT(FALSE); return false; } //创建广场 pGlobalPlazaItem = CreateGlobalPlazaItem(); if (pGlobalPlazaItem == NULL) { ASSERT(FALSE); return false; } //设置广场 pGlobalPlazaItem->m_wIndex = wBindIndex; pGlobalPlazaItem->m_GamePlaza = GamePlaza; //设置索引 m_MapPlazaID[GamePlaza.wPlazaID] = pGlobalPlazaItem; return true; } //删除服务器 bool CGlobalInfoManager::DeleteServerItem(WORD wServerID) { //寻找房间 CGlobalServerItem * pGlobalServerItem = NULL; if (m_MapServerID.Lookup(wServerID, pGlobalServerItem) == FALSE) { //ASSERT(FALSE); return false; } POSITION PositionB = NULL; GOTO1: PositionB = m_PrivateRoom.GetStartPosition(); while (PositionB != NULL) { DWORD dRoomID; JN_GR_RoomListBig crDate; ZeroMemory(&crDate, sizeof(crDate)); m_PrivateRoom.GetNextAssoc(PositionB, dRoomID, crDate); if (crDate.dwServerID == wServerID) { //所有服务器发送删除的消息 POSITION Position = NULL; do { //获取对象 CGlobalServerItem * pGlobalServerItem = EnumServerItem(Position); //设置数据 if (pGlobalServerItem != NULL) { crDate.dwInsert_UpData_Del = 2; if (pGlobalServerItem->GetServerID() != wServerID) { m_pCAttemperEngineSink->SendDataToGame(pGlobalServerItem->GetServerID(), MDM_CS_USER_COLLECT, SUB_CS_UPDATAOTHERROOM, &crDate, sizeof(JN_GR_RoomListBig)); } } } while (Position != NULL); m_PrivateRoom.RemoveKey(dRoomID); CString csTest; csTest.Format(_T("私有房间数目:%d,服务器关闭,所拥有的房间编号%d->销毁"), m_PrivateRoom.GetSize(), dRoomID); CTraceService::TraceString(csTest, TraceLevel_Normal); goto GOTO1; } } POSITION PositionA = NULL; GOTO2: //清除该服务器上的桌子信息 PositionA = m_RoomList.GetStartPosition(); while (PositionA != NULL) { DWORD dUser; JN_GR_RoomListGroup crDate; ZeroMemory(&crDate, sizeof(crDate)); m_RoomList.GetNextAssoc(PositionA, dUser, crDate); if (crDate.Num > 10) crDate.Num = 10; for (size_t i = 0; i < crDate.Num; i++) { if (crDate.jgrDate[i].dwServerID == wServerID) { crDate.jgrDate[i].dwInsert_UpData_Del = 2; //发送清除命令 CGlobalUserItem * pUser = SearchUserItemByUserID(dUser); if (pUser) { int a = 0; CGlobalServerItem * p = pUser->EnumServerItem(a); while (p) { if ((p->GetServerID() == pUser->m_ServerID) && pUser->m_ServerID != wServerID) { //最近登录的服务器,发送。 m_pCAttemperEngineSink->SendDataToGame(p->GetServerID(), MDM_CS_USER_COLLECT, SUB_CS_UPDATAOWNROOM, &crDate.jgrDate[i], sizeof(JN_GR_RoomListBig)); break; } a++; p = pUser->EnumServerItem(a); } } //删除此项 if (crDate.Num > 0) { crDate.jgrDate[i] = crDate.jgrDate[crDate.Num - 1]; i--; } if (crDate.Num > 0) crDate.Num--; if (crDate.Num == 0) { //清除这个人的信息 m_RoomList.RemoveKey(dUser); goto GOTO2; } else { m_RoomList[dUser] = crDate; } } } } //变量定义 DWORD dwUserKey = 0L; CGlobalUserItem * pGlobalUserItem = NULL; POSITION Position = pGlobalServerItem->m_MapUserID.GetStartPosition(); //删除用户 while (Position != NULL) { //获取数据 pGlobalServerItem->m_MapUserID.GetNextAssoc(Position, dwUserKey, pGlobalUserItem); //房间关联 for (INT_PTR i = 0; i < pGlobalUserItem->m_GlobalServerItemArray.GetCount(); i++) { //获取房间 CGlobalServerItem * pTempServerItem = pGlobalUserItem->m_GlobalServerItemArray[i]; //房间判断 if (pTempServerItem->GetServerID() == wServerID) { pGlobalUserItem->m_GlobalServerItemArray.RemoveAt(i); break; } } //释放用户 if (pGlobalUserItem->m_GlobalServerItemArray.GetCount() == 0) { m_MapUserID.RemoveKey(dwUserKey); FreeGlobalUserItem(pGlobalUserItem); } } //释放房间 m_MapServerID.RemoveKey(wServerID); FreeGlobalServerItem(pGlobalServerItem); CString csTest; csTest.Format(_T("服务器%d->销毁"), wServerID); CTraceService::TraceString(csTest, TraceLevel_Normal); return true; } //激活房间 bool CGlobalInfoManager::ActiveServerItem(WORD wBindIndex, tagGameServer & GameServer) { //寻找房间 CGlobalServerItem * pGlobalServerItem = NULL; if (m_MapServerID.Lookup(GameServer.wServerID, pGlobalServerItem) == TRUE) { //提示消息 CString cstr = L""; cstr.Format(L"m_MapServerID能找到:%d,不需要激活", GameServer.wServerID); CTraceService::TraceString(cstr, TraceLevel_Warning); ASSERT(FALSE); return false; } //创建房间 pGlobalServerItem = CreateGlobalServerItem(); if (pGlobalServerItem == NULL) { ASSERT(FALSE); return false; } //设置房间 pGlobalServerItem->m_wIndex = wBindIndex; pGlobalServerItem->m_GameServer = GameServer; //设置索引 m_MapServerID[GameServer.wServerID] = pGlobalServerItem; return true; } //寻找广场 CGlobalPlazaItem * CGlobalInfoManager::SearchPlazaItem(WORD wPlazaID) { //寻找房间 CGlobalPlazaItem * pGlobalPlazaItem = NULL; m_MapPlazaID.Lookup(wPlazaID, pGlobalPlazaItem); return pGlobalPlazaItem; } ///--- add by yd 通过 登录服务器ID查找 CGlobalPlazaItem * CGlobalInfoManager::SearchPlazaItemByServerID(WORD wServerID) { WORD wPlazaID = 0L; CGlobalPlazaItem * pGlobalPlazaItem = NULL; POSITION Position = m_MapPlazaID.GetStartPosition(); while (Position != NULL) { m_MapPlazaID.GetNextAssoc(Position, wPlazaID, pGlobalPlazaItem); if (pGlobalPlazaItem != NULL) { if (pGlobalPlazaItem->m_GamePlaza.wServerID == wServerID) { return pGlobalPlazaItem; } } } return NULL; } //寻找房间 CGlobalServerItem * CGlobalInfoManager::SearchServerItem(WORD wServerID) { //寻找房间 CGlobalServerItem * pGlobalServerItem = NULL; m_MapServerID.Lookup(wServerID, pGlobalServerItem); return pGlobalServerItem; } //寻找用户 CGlobalUserItem * CGlobalInfoManager::SearchUserItemByUserID(DWORD dwUserID) { //寻找用户 CGlobalUserItem * pGlobalUserItem = NULL; m_MapUserID.Lookup(dwUserID, pGlobalUserItem); return pGlobalUserItem; } //寻找用户 CGlobalUserItem * CGlobalInfoManager::SearchUserItemByGameID(DWORD dwGameID) { //寻找用户 CGlobalUserItem * pGlobalUserItem = NULL; m_MapGameID.Lookup(dwGameID, pGlobalUserItem); return pGlobalUserItem; } //寻找用户 //CGlobalUserItem * CGlobalInfoManager::SearchUserItemByNickName(LPCTSTR pszNickName) //{ //寻找用户 // VOID * pGlobalUserItem = NULL; //m_MapNickName.Lookup(pszNickName, pGlobalUserItem); // return (CGlobalUserItem *)pGlobalUserItem; //} //枚举用户 CGlobalUserItem * CGlobalInfoManager::EnumUserItem(POSITION & Position) { //变量定义 DWORD dwUserID = 0L; CGlobalUserItem * pGlobalUserItem = NULL; //获取对象 if (Position == NULL) Position = m_MapUserID.GetStartPosition(); if (Position != NULL) m_MapUserID.GetNextAssoc(Position, dwUserID, pGlobalUserItem); return pGlobalUserItem; } //枚举广场 CGlobalPlazaItem * CGlobalInfoManager::EnumPlazaItem(POSITION & Position) { //变量定义 WORD wPlazaID = 0L; CGlobalPlazaItem * pGlobalPlazaItem = NULL; //获取对象 if (Position == NULL) Position = m_MapPlazaID.GetStartPosition(); if (Position != NULL) m_MapPlazaID.GetNextAssoc(Position, wPlazaID, pGlobalPlazaItem); return pGlobalPlazaItem; } //枚举房间 CGlobalServerItem * CGlobalInfoManager::EnumServerItem(POSITION & Position) { //变量定义 WORD wServerID = 0L; CGlobalServerItem * pGlobalServerItem = NULL; //获取对象 if (Position == NULL) Position = m_MapServerID.GetStartPosition(); if (Position != NULL) m_MapServerID.GetNextAssoc(Position, wServerID, pGlobalServerItem); return pGlobalServerItem; } //创建用户 CGlobalUserItem * CGlobalInfoManager::CreateGlobalUserItem() { //使用存储 if (m_pGlobalUserItem != NULL) { CGlobalUserItem * pGlobalUserItem = m_pGlobalUserItem; m_pGlobalUserItem = m_pGlobalUserItem->m_pNextUserItemPtr; pGlobalUserItem->m_pNextUserItemPtr = NULL; return pGlobalUserItem; } //创建对象 try { CGlobalUserItem * pGlobalUserItem = new CGlobalUserItem; return pGlobalUserItem; } catch (...) {} return NULL; } //创建广场 CGlobalPlazaItem * CGlobalInfoManager::CreateGlobalPlazaItem() { //使用存储 if (m_pGlobalPlazaItem != NULL) { CGlobalPlazaItem * pGlobalPlazaItem = m_pGlobalPlazaItem; m_pGlobalPlazaItem = m_pGlobalPlazaItem->m_pNextPlazaItemPtr; pGlobalPlazaItem->m_pNextPlazaItemPtr = NULL; return pGlobalPlazaItem; } //创建对象 try { CGlobalPlazaItem * pGlobalPlazaItem = new CGlobalPlazaItem; return pGlobalPlazaItem; } catch (...) {} return NULL; } //创建房间 CGlobalServerItem * CGlobalInfoManager::CreateGlobalServerItem() { //使用存储 if (m_pGlobalServerItem != NULL) { CGlobalServerItem * pGlobalServerItem = m_pGlobalServerItem; m_pGlobalServerItem = m_pGlobalServerItem->m_pNextServerItemPtr; pGlobalServerItem->m_pNextServerItemPtr = NULL; return pGlobalServerItem; } //创建对象 try { CGlobalServerItem * pGlobalServerItem = new CGlobalServerItem; return pGlobalServerItem; } catch (...) {} return NULL; } //释放用户 bool CGlobalInfoManager::FreeGlobalUserItem(CGlobalUserItem * pGlobalUserItem) { //效验参数 ASSERT(pGlobalUserItem != NULL); if (pGlobalUserItem == NULL) return false; //设置变量 pGlobalUserItem->m_dwUserID = 0L; pGlobalUserItem->m_dwGameID = 0L; // pGlobalUserItem->m_szNickName[0] = 0; pGlobalUserItem->m_GlobalServerItemArray.RemoveAll(); //加入存储 pGlobalUserItem->m_pNextUserItemPtr = m_pGlobalUserItem; m_pGlobalUserItem = pGlobalUserItem; return true; } //释放广场 bool CGlobalInfoManager::FreeGlobalPlazaItem(CGlobalPlazaItem * pGlobalPlazaItem) { //效验参数 ASSERT(pGlobalPlazaItem != NULL); if (pGlobalPlazaItem == NULL) return false; //设置变量 pGlobalPlazaItem->m_wIndex = 0; ZeroMemory(&pGlobalPlazaItem->m_GamePlaza, sizeof(pGlobalPlazaItem->m_GamePlaza)); if (m_pGlobalPlazaItem == NULL ) { //加入存储 pGlobalPlazaItem->m_pNextPlazaItemPtr = m_pGlobalPlazaItem; m_pGlobalPlazaItem = pGlobalPlazaItem; //提示消息 CString cstr = L""; cstr.Format(L"m_pNextPlazaItemPtr指向初始化pGlobalPlazaItem类指针"); CTraceService::TraceString(cstr, TraceLevel_Normal); } else { SafeDelete(pGlobalPlazaItem); //提示消息 CString cstr = L""; cstr.Format(L"释放pGlobalPlazaItem类指针"); CTraceService::TraceString(cstr, TraceLevel_Normal); } return true; } //释放房间 bool CGlobalInfoManager::FreeGlobalServerItem(CGlobalServerItem * pGlobalServerItem) { //效验参数 ASSERT(pGlobalServerItem != NULL); if (pGlobalServerItem == NULL) return false; //设置索引 pGlobalServerItem->m_MapUserID.RemoveAll(); //设置变量 pGlobalServerItem->m_wIndex = 0; ZeroMemory(&pGlobalServerItem->m_GameServer, sizeof(pGlobalServerItem->m_GameServer)); //加入存储 pGlobalServerItem->m_pNextServerItemPtr = m_pGlobalServerItem; m_pGlobalServerItem = pGlobalServerItem; return true; } //////////////////////////////////////////////////////////////////////////////////