|
- #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;
- }
-
- //////////////////////////////////////////////////////////////////////////////////
|