|
- #include "StdAfx.h"
- #include "ServerListManager.h"
- #include "ServiceUnits.h"
- //////////////////////////////////////////////////////////////////////////////////
-
- //构造函数
- CGameTypeItem::CGameTypeItem()
- {
- //设置变量
- ZeroMemory(&m_GameType, sizeof(m_GameType));
-
- return;
- }
-
- //////////////////////////////////////////////////////////////////////////////////
-
- //构造函数
- CGameKindItem::CGameKindItem()
- {
- //设置变量
- ZeroMemory(&m_GameKind, sizeof(m_GameKind));
-
- return;
- }
-
- //////////////////////////////////////////////////////////////////////////////////
-
- //构造函数
- CGameNodeItem::CGameNodeItem()
- {
- //设置变量
- ZeroMemory(&m_GameNode, sizeof(m_GameNode));
-
- return;
- }
-
- //////////////////////////////////////////////////////////////////////////////////
-
- //构造函数
- CGameServerItem::CGameServerItem()
- {
- //设置变量
- ZeroMemory(&m_GameServer, sizeof(m_GameServer));
-
- return;
- }
-
- //////////////////////////////////////////////////////////////////////////////////
-
-
- //获取随机链路
- std::wstring CGameServerItem::GetRandom(DWORD dUserID, int iPaiMing, int iCount)
- {
- std::wstring cc = L"";
-
- CList<std::wstring> aa;
-
- for (size_t i = 0; i < MAX_TONGDAO; i++)
- {
- if (m_ListLL[i].iIsOk == 1)
- {
- std::wstring bb = m_ListLL[i].szIP;
- aa.AddTail(bb);
- }
- }
-
- if (aa.GetCount() == 0) return cc;
-
- int iNum = aa.GetCount();
-
- double dPaiMing = ((double)iPaiMing) / ((double)iCount) * ((double)iNum);
- int iKey = (int)dPaiMing;
-
- if (iKey > iNum) iKey = iNum;
- cc = aa.GetAt(aa.FindIndex(iKey));
-
- TCHAR szString[512] = TEXT("");
- ZeroMemory(szString, sizeof(TCHAR) * 512);
- _sntprintf(szString, CountArray(szString), TEXT("通道信息 总通道数->%d 排名:%d 最大排名:%d 取通道ID:%d")
- , aa.GetCount(), iPaiMing, iCount, iKey);
-
- aa.RemoveAll();
-
- if (CServiceUnits::g_pServiceUnits->m_AttemperEngineSink.IsJC(1314))
- {
- //提示消息
- CTraceService::TraceString(szString, TraceLevel_Normal);
- }
-
- return cc;
- }
-
-
- //更新链路状态
- bool CGameServerItem::SetLLStat(std::wstring szIp, int iStat, SYSTEMTIME Time)
- {
- bool bFind = false;
- for (size_t i = 0; i < MAX_TONGDAO; i++)
- {
- std::wstring test = m_ListLL[i].szIP;
-
- if (test == szIp)
- {
- m_ListLL[i].iIsOk = iStat;
- m_ListLL[i].SystemTimeConclude = Time;
- bFind = true;
- //break;
- }
- }
-
- if (bFind) return true;
-
- for (size_t i = 0; i < MAX_TONGDAO; i++)
- {
- std::wstring test = m_ListLL[i].szIP;
- if (test == _T(""))
- {
- StringCbCat(m_ListLL[i].szIP, 32, szIp.c_str());
- m_ListLL[i].iIsOk = iStat;
- m_ListLL[i].SystemTimeConclude = Time;
- break;
- }
- }
- return true;
- }
- //////////////////////////////////////////////////////////////////////////////////
-
- //构造函数
- CGamePageItem::CGamePageItem()
- {
- //设置变量
- ZeroMemory(&m_GamePage, sizeof(m_GamePage));
-
- return;
- }
-
- //////////////////////////////////////////////////////////////////////////////////
-
- //构造函数
- CServerListManager::CServerListManager()
- {
- //设置质数
- m_TypeItemMap.InitHashTable(PRIME_TYPE);
- m_KindItemMap.InitHashTable(PRIME_KIND);
- m_NodeItemMap.InitHashTable(PRIME_NODE);
- m_PageItemMap.InitHashTable(PRIME_PAGE);
- m_ServerItemMap.InitHashTable(PRIME_SERVER);
-
- return;
- }
-
- //析构函数
- CServerListManager::~CServerListManager()
- {
- //变量定义
- WORD wKey = 0;
-
- //删除种类
- CGameTypeItem * pGameTypeItem = NULL;
- POSITION Position = m_TypeItemMap.GetStartPosition();
- while (Position != NULL)
- {
- m_TypeItemMap.GetNextAssoc(Position, wKey, pGameTypeItem);
- SafeDelete(pGameTypeItem);
- }
- for (INT_PTR i = 0; i < m_TypeItemBuffer.GetCount(); i++)
- {
- pGameTypeItem = m_TypeItemBuffer[i];
- SafeDelete(pGameTypeItem);
- }
- m_TypeItemMap.RemoveAll();
- m_TypeItemBuffer.RemoveAll();
-
- //删除类型
- CGameKindItem * pGameKindItem = NULL;
- Position = m_KindItemMap.GetStartPosition();
- while (Position != NULL)
- {
- m_KindItemMap.GetNextAssoc(Position, wKey, pGameKindItem);
- SafeDelete(pGameKindItem);
- }
- for (INT_PTR i = 0; i < m_KindItemBuffer.GetCount(); i++)
- {
- pGameKindItem = m_KindItemBuffer[i];
- SafeDelete(pGameKindItem);
- }
- m_KindItemMap.RemoveAll();
- m_KindItemBuffer.RemoveAll();
-
- //删除节点
- CGameNodeItem * pGameNodeItem = NULL;
- Position = m_NodeItemMap.GetStartPosition();
- while (Position != NULL)
- {
- m_NodeItemMap.GetNextAssoc(Position, wKey, pGameNodeItem);
- SafeDelete(pGameNodeItem);
- }
- for (INT_PTR i = 0; i < m_NodeItemBuffer.GetCount(); i++)
- {
- pGameNodeItem = m_NodeItemBuffer[i];
- SafeDelete(pGameNodeItem);
- }
- m_NodeItemMap.RemoveAll();
- m_NodeItemBuffer.RemoveAll();
-
- //删除房间
- CGameServerItem * pGameServerItem = NULL;
- Position = m_ServerItemMap.GetStartPosition();
- while (Position != NULL)
- {
- m_ServerItemMap.GetNextAssoc(Position, wKey, pGameServerItem);
- SafeDelete(pGameServerItem);
- }
- for (INT_PTR i = 0; i < m_ServerItemBuffer.GetCount(); i++)
- {
- pGameServerItem = m_ServerItemBuffer[i];
- SafeDelete(pGameServerItem);
- }
- m_ServerItemMap.RemoveAll();
- m_ServerItemBuffer.RemoveAll();
-
- //删除定制
- CGamePageItem * pGamePageItem = NULL;
- Position = m_PageItemMap.GetStartPosition();
- while (Position != NULL)
- {
- m_PageItemMap.GetNextAssoc(Position, wKey, pGamePageItem);
- SafeDelete(pGamePageItem);
- }
- for (INT_PTR i = 0; i < m_PageItemBuffer.GetCount(); i++)
- {
- pGamePageItem = m_PageItemBuffer[i];
- SafeDelete(pGamePageItem);
- }
- m_PageItemMap.RemoveAll();
- m_PageItemBuffer.RemoveAll();
-
- return;
- }
-
- //重置列表
- VOID CServerListManager::ResetServerList()
- {
- //废弃列表
- DisuseKernelItem();
- DisuseServerItem();
-
- //清理列表
- CleanKernelItem();
- CleanServerItem();
-
- return;
- }
-
- //清理内核
- VOID CServerListManager::CleanKernelItem()
- {
- //变量定义
- POSITION PositionType = m_TypeItemMap.GetStartPosition();
- POSITION PositionKind = m_KindItemMap.GetStartPosition();
- POSITION PositionNode = m_NodeItemMap.GetStartPosition();
- POSITION PositionPage = m_PageItemMap.GetStartPosition();
-
- //清理种类
- while (PositionType != NULL)
- {
- //索引房间
- WORD wTypeID = 0;
- CGameTypeItem * pGameTypeItem = NULL;
- m_TypeItemMap.GetNextAssoc(PositionType, wTypeID, pGameTypeItem);
-
- //删除判断
- if (pGameTypeItem->m_bDisuse == true)
- {
- m_TypeItemMap.RemoveKey(wTypeID);
- m_TypeItemBuffer.Add(pGameTypeItem);
- }
- }
-
- //清理类型
- while (PositionKind != NULL)
- {
- //索引房间
- WORD wKindID = 0;
- CGameKindItem * pGameKindItem = NULL;
- m_KindItemMap.GetNextAssoc(PositionKind, wKindID, pGameKindItem);
-
- //删除判断
- if (pGameKindItem->m_bDisuse == true)
- {
- m_KindItemMap.RemoveKey(wKindID);
- m_KindItemBuffer.Add(pGameKindItem);
- }
- }
-
- //清理节点
- while (PositionNode != NULL)
- {
- //索引房间
- WORD wNodeID = 0;
- CGameNodeItem * pGameNodeItem = NULL;
- m_NodeItemMap.GetNextAssoc(PositionNode, wNodeID, pGameNodeItem);
-
- //删除判断
- if (pGameNodeItem->m_bDisuse == true)
- {
- m_NodeItemMap.RemoveKey(wNodeID);
- m_NodeItemBuffer.Add(pGameNodeItem);
- }
- }
-
- //清理定制
- while (PositionPage != NULL)
- {
- //索引房间
- WORD wPageID = 0;
- CGamePageItem * pGamePageItem = NULL;
- m_PageItemMap.GetNextAssoc(PositionPage, wPageID, pGamePageItem);
-
- //删除判断
- if (pGamePageItem->m_bDisuse == true)
- {
- m_PageItemMap.RemoveKey(wPageID);
- m_PageItemBuffer.Add(pGamePageItem);
- }
- }
-
- return;
- }
-
- //清理房间
- VOID CServerListManager::CleanServerItem()
- {
- //变量定义
- POSITION PositionServer = m_ServerItemMap.GetStartPosition();
-
- //删除房间
- while (PositionServer != NULL)
- {
- //索引房间
- WORD wServerID = 0;
- CGameServerItem * pGameServerItem = NULL;
- m_ServerItemMap.GetNextAssoc(PositionServer, wServerID, pGameServerItem);
-
- //删除判断
- if (pGameServerItem->m_bDisuse == true)
- {
- //删除数据
- m_ServerItemMap.RemoveKey(wServerID);
- m_ServerItemBuffer.Add(pGameServerItem);
-
- //设置人数
- CGameKindItem * pGameKindItem = NULL;
- if (m_KindItemMap.Lookup(pGameServerItem->m_GameServer.wKindID, pGameKindItem) == TRUE)
- {
- tagGameServer * pGameServer = &pGameServerItem->m_GameServer;
- pGameKindItem->m_GameKind.dwOnLineCount -= pGameServer->dwOnLineCount;
- pGameKindItem->m_GameKind.dwFullCount -= pGameServer->dwFullCount;
- }
- }
- }
-
- return;
- }
-
- //废弃内核
- VOID CServerListManager::DisuseKernelItem()
- {
- //变量定义
- WORD wKey = 0;
- DWORD dwKey = 0;
-
- //废弃种类
- CGameTypeItem * pGameTypeItem = NULL;
- POSITION Position = m_TypeItemMap.GetStartPosition();
- while (Position != NULL)
- {
- m_TypeItemMap.GetNextAssoc(Position, wKey, pGameTypeItem);
- pGameTypeItem->m_bDisuse = true;
- }
-
- //废弃类型
- CGameKindItem * pGameKindItem = NULL;
- Position = m_KindItemMap.GetStartPosition();
- while (Position != NULL)
- {
- m_KindItemMap.GetNextAssoc(Position, wKey, pGameKindItem);
- pGameKindItem->m_bDisuse = true;
- }
-
- //废弃节点
- CGameNodeItem * pGameNodeItem = NULL;
- Position = m_NodeItemMap.GetStartPosition();
- while (Position != NULL)
- {
- m_NodeItemMap.GetNextAssoc(Position, wKey, pGameNodeItem);
- pGameNodeItem->m_bDisuse = true;
- }
-
- //废弃定制
- CGamePageItem * pGamePageItem = NULL;
- Position = m_PageItemMap.GetStartPosition();
- while (Position != NULL)
- {
- m_PageItemMap.GetNextAssoc(Position, wKey, pGamePageItem);
- pGamePageItem->m_bDisuse = true;
- }
-
- return;
- }
-
- //废弃房间
- VOID CServerListManager::DisuseServerItem()
- {
- //变量定义
- WORD wKey = 0;
- CGameServerItem * pGameServerItem = NULL;
-
- //废弃房间
- POSITION Position = m_ServerItemMap.GetStartPosition();
- while (Position != NULL)
- {
- m_ServerItemMap.GetNextAssoc(Position, wKey, pGameServerItem);
- pGameServerItem->m_bDisuse = true;
- }
-
- return;
- }
-
- //统计人数
- DWORD CServerListManager::CollectOnlineInfo()
- {
- //变量定义
- DWORD dwOnLineCount = 0L;
- POSITION PositionKind = m_KindItemMap.GetStartPosition();
-
- //统计人数
- while (PositionKind != NULL)
- {
- //索引类型
- WORD wKindID = 0;
- CGameKindItem * pGameKindItem = NULL;
- m_KindItemMap.GetNextAssoc(PositionKind, wKindID, pGameKindItem);
-
- //统计人数
- if (pGameKindItem != NULL) dwOnLineCount += pGameKindItem->m_GameKind.dwOnLineCount;
- }
-
- return dwOnLineCount;
- }
-
- //类型在线
- DWORD CServerListManager::CollectOnlineInfo(WORD wKindID)
- {
- //变量定义
- DWORD dwOnLineCount = 0L;
- POSITION PositionServer = m_ServerItemMap.GetStartPosition();
-
- //枚举房间
- while (PositionServer != NULL)
- {
- //索引房间
- WORD wServerID = 0;
- CGameServerItem * pGameServerItem = NULL;
- m_ServerItemMap.GetNextAssoc(PositionServer, wServerID, pGameServerItem);
-
- //统计人数
- if (pGameServerItem->m_GameServer.wKindID == wKindID)
- {
- dwOnLineCount += pGameServerItem->m_GameServer.dwOnLineCount;
- }
- }
-
- return dwOnLineCount;
- }
-
- //插入种类
- bool CServerListManager::InsertGameType(tagGameType * pGameType)
- {
- //效验参数
- ASSERT(pGameType != NULL);
- if (pGameType == NULL) return false;
-
- //查找现存
- CGameTypeItem * pGameTypeItem = NULL;
- if (m_TypeItemMap.Lookup(pGameType->wTypeID, pGameTypeItem) == FALSE)
- {
- //创建对象
- try
- {
- INT_PTR nStroeCount = m_TypeItemBuffer.GetCount();
- if (nStroeCount > 0)
- {
- pGameTypeItem = m_TypeItemBuffer[nStroeCount - 1];
- m_TypeItemBuffer.RemoveAt(nStroeCount - 1);
- }
- else
- {
- pGameTypeItem = new CGameTypeItem;
- if (pGameTypeItem == NULL) return false;
- }
- }
- catch (...) { return false; }
-
- //设置变量
- ZeroMemory(pGameTypeItem, sizeof(CGameTypeItem));
- }
-
- //设置数据
- pGameTypeItem->m_bDisuse = false;
- CopyMemory(&pGameTypeItem->m_GameType, pGameType, sizeof(tagGameType));
-
- //设置索引
- m_TypeItemMap[pGameType->wTypeID] = pGameTypeItem;
-
- return true;
- }
-
- //插入类型
- bool CServerListManager::InsertGameKind(tagGameKind * pGameKind)
- {
- //效验参数
- ASSERT(pGameKind != NULL);
- if (pGameKind == NULL) return false;
-
- //查找现存
- CGameKindItem * pGameKindItem = NULL;
- if (m_KindItemMap.Lookup(pGameKind->wKindID, pGameKindItem) == FALSE)
- {
- //创建对象
- try
- {
- INT_PTR nStroeCount = m_KindItemBuffer.GetCount();
- if (nStroeCount > 0)
- {
- pGameKindItem = m_KindItemBuffer[nStroeCount - 1];
- m_KindItemBuffer.RemoveAt(nStroeCount - 1);
- }
- else
- {
- pGameKindItem = new CGameKindItem;
- if (pGameKindItem == NULL) return false;
- }
- }
- catch (...) { return false; }
-
- //设置变量
- ZeroMemory(pGameKindItem, sizeof(CGameKindItem));
- }
-
- //设置数据
- pGameKindItem->m_bDisuse = false;
- CopyMemory(&pGameKindItem->m_GameKind, pGameKind, sizeof(tagGameKind));
-
- //设置索引
- m_KindItemMap[pGameKind->wKindID] = pGameKindItem;
-
- return true;
- }
-
- //插入节点
- bool CServerListManager::InsertGameNode(tagGameNode * pGameNode)
- {
- //效验参数
- ASSERT(pGameNode != NULL);
- if (pGameNode == NULL) return false;
-
- //查找现存
- CGameNodeItem * pGameNodeItem = NULL;
- if (m_NodeItemMap.Lookup(pGameNode->wNodeID, pGameNodeItem) == FALSE)
- {
- //创建对象
- try
- {
- INT_PTR nStroeCount = m_NodeItemBuffer.GetCount();
- if (nStroeCount > 0)
- {
- pGameNodeItem = m_NodeItemBuffer[nStroeCount - 1];
- m_NodeItemBuffer.RemoveAt(nStroeCount - 1);
- }
- else
- {
- pGameNodeItem = new CGameNodeItem;
- if (pGameNodeItem == NULL) return false;
- }
- }
- catch (...) { return false; }
-
- //设置变量
- ZeroMemory(pGameNodeItem, sizeof(CGameNodeItem));
- }
-
- //插入数据
- pGameNodeItem->m_bDisuse = false;
- CopyMemory(&pGameNodeItem->m_GameNode, pGameNode, sizeof(tagGameNode));
-
- //设置索引
- m_NodeItemMap[pGameNode->wNodeID] = pGameNodeItem;
-
- return true;
- }
-
- //插入定制
- bool CServerListManager::InsertGamePage(tagGamePage * pGamePage)
- {
- //效验参数
- ASSERT(pGamePage != NULL);
- if (pGamePage == NULL) return false;
-
- //获取子项
- CGamePageItem * pGamePageItem = NULL;
- if (m_PageItemMap.Lookup(pGamePage->wPageID, pGamePageItem) == FALSE)
- {
- //创建对象
- try
- {
- INT_PTR nStroeCount = m_PageItemBuffer.GetCount();
- if (nStroeCount > 0)
- {
- pGamePageItem = m_PageItemBuffer[nStroeCount - 1];
- m_PageItemBuffer.RemoveAt(nStroeCount - 1);
- }
- else
- {
- pGamePageItem = new CGamePageItem;
- if (pGamePageItem == NULL) return false;
- }
- }
- catch (...) { return false; }
-
- //设置变量
- ZeroMemory(pGamePageItem, sizeof(CGamePageItem));
- }
-
- //设置数据
- pGamePageItem->m_bDisuse = false;
- CopyMemory(&pGamePageItem->m_GamePage, pGamePage, sizeof(tagGamePage));
-
- //设置索引
- m_PageItemMap[pGamePage->wPageID] = pGamePageItem;
-
- return true;
- }
-
- //插入房间
- bool CServerListManager::InsertGameServer(tagGameServer * pGameServer)
- {
- //效验参数
- ASSERT(pGameServer != NULL);
- if (pGameServer == NULL) return false;
-
- //查找房间
- WORD wKindID = 0;
- DWORD dwOnLineCount = 0L;
- DWORD dwMaxPlayer = 0L;
- CGameServerItem * pGameServerItem = NULL;
-
- //获取子项
- if (m_ServerItemMap.Lookup(pGameServer->wServerID, pGameServerItem) == FALSE)
- {
- //创建对象
- try
- {
- INT_PTR nStroeCount = m_ServerItemBuffer.GetCount();
- if (nStroeCount > 0)
- {
- pGameServerItem = m_ServerItemBuffer[nStroeCount - 1];
- m_ServerItemBuffer.RemoveAt(nStroeCount - 1);
- }
- else
- {
- pGameServerItem = new CGameServerItem;
- if (pGameServerItem == NULL) return false;
- }
- }
- catch (...) { return false; }
-
- //设置变量
- ZeroMemory(pGameServerItem, sizeof(CGameServerItem));
- }
- else
- {
- //保存变量
- wKindID = pGameServerItem->m_GameServer.wKindID;
- dwOnLineCount = pGameServerItem->m_GameServer.dwOnLineCount;
- dwMaxPlayer = pGameServerItem->m_GameServer.dwFullCount;
- }
-
- //设置数据
- pGameServerItem->m_bDisuse = false;
- CopyMemory(&pGameServerItem->m_GameServer, pGameServer, sizeof(tagGameServer));
-
- //设置人数
- if (wKindID != pGameServerItem->m_GameServer.wKindID)
- {
- //变量定义
- CGameKindItem * pGameKindItemLast = NULL;
- CGameKindItem * pGameKindItemCurrent = NULL;
-
- //历史人数
- if ((wKindID != 0) && (m_KindItemMap.Lookup(wKindID, pGameKindItemLast) == TRUE))
- {
- pGameKindItemLast->m_GameKind.dwOnLineCount -= dwOnLineCount;
- pGameKindItemLast->m_GameKind.dwFullCount -= dwMaxPlayer;
- }
-
- //当前人数
- if (m_KindItemMap.Lookup(pGameServer->wKindID, pGameKindItemCurrent) == TRUE)
- {
- pGameKindItemCurrent->m_GameKind.dwOnLineCount += pGameServer->dwOnLineCount;
- pGameKindItemCurrent->m_GameKind.dwFullCount += pGameServer->dwFullCount;
- }
- }
- else
- {
- //查找类型
- CGameKindItem * pGameKindItem = NULL;
- m_KindItemMap.Lookup(wKindID, pGameKindItem);
-
- //设置人数
- if (pGameKindItem != NULL)
- {
- pGameKindItem->m_GameKind.dwOnLineCount -= dwOnLineCount;
- pGameKindItem->m_GameKind.dwOnLineCount += pGameServer->dwOnLineCount;
-
- pGameKindItem->m_GameKind.dwFullCount -= dwMaxPlayer;
- pGameKindItem->m_GameKind.dwFullCount += pGameServer->dwFullCount;
- }
- }
-
- //设置索引
- m_ServerItemMap[pGameServer->wServerID] = pGameServerItem;
-
- return true;
- }
-
- //删除种类
- bool CServerListManager::DeleteGameType(WORD wTypeID)
- {
- //查找种类
- CGameTypeItem * pGameTypeItem = NULL;
- if (m_TypeItemMap.Lookup(wTypeID, pGameTypeItem) == FALSE) return false;
-
- //删除数据
- m_TypeItemMap.RemoveKey(wTypeID);
- m_TypeItemBuffer.Add(pGameTypeItem);
-
- return true;
- }
-
- //删除类型
- bool CServerListManager::DeleteGameKind(WORD wKindID)
- {
- //查找类型
- CGameKindItem * pGameKindItem = NULL;
- if (m_KindItemMap.Lookup(wKindID, pGameKindItem) == FALSE) return false;
-
- //删除数据
- m_KindItemMap.RemoveKey(wKindID);
- m_KindItemBuffer.Add(pGameKindItem);
-
- //设置变量
- ZeroMemory(pGameKindItem, sizeof(CGameKindItem));
-
- return true;
- }
-
- //删除节点
- bool CServerListManager::DeleteGameNode(WORD wNodeID)
- {
- //查找节点
- CGameNodeItem * pGameNodeItem = NULL;
- if (m_NodeItemMap.Lookup(wNodeID, pGameNodeItem) == FALSE) return false;
-
- //删除数据
- m_NodeItemMap.RemoveKey(wNodeID);
- m_NodeItemBuffer.Add(pGameNodeItem);
-
- //设置变量
- ZeroMemory(pGameNodeItem, sizeof(CGameNodeItem));
-
- return false;
- }
-
- //删除房间
- bool CServerListManager::DeleteGameServer(WORD wServerID)
- {
- //查找房间
- CGameServerItem * pGameServerItem = NULL;
- if (m_ServerItemMap.Lookup(wServerID, pGameServerItem) == FALSE) return false;
-
- //删除数据
- m_ServerItemMap.RemoveKey(wServerID);
- m_ServerItemBuffer.Add(pGameServerItem);
-
- //设置人数
- CGameKindItem * pGameKindItem = NULL;
- if (m_KindItemMap.Lookup(pGameServerItem->m_GameServer.wKindID, pGameKindItem) == TRUE)
- {
- tagGameServer * pGameServer = &pGameServerItem->m_GameServer;
- pGameKindItem->m_GameKind.dwOnLineCount -= pGameServer->dwOnLineCount;
- pGameKindItem->m_GameKind.dwFullCount -= pGameServer->dwFullCount;
- }
-
- return false;
- }
-
- //删除定制
- bool CServerListManager::DeleteGamePage(WORD wPageID)
- {
- //查找类型
- CGamePageItem * pGamePageItem = NULL;
- if (m_PageItemMap.Lookup(wPageID, pGamePageItem) == FALSE) return false;
-
- //删除数据
- m_PageItemMap.RemoveKey(wPageID);
- m_PageItemBuffer.Add(pGamePageItem);
-
- //设置变量
- ZeroMemory(pGamePageItem, sizeof(CGamePageItem));
-
- return true;
- }
-
- //枚举种类
- CGameTypeItem * CServerListManager::EmunGameTypeItem(POSITION & Position)
- {
- //变量定义
- WORD wKey = 0;
- CGameTypeItem * pGameTypeItem = NULL;
-
- //获取对象
- if (Position == NULL) Position = m_TypeItemMap.GetStartPosition();
- if (Position != NULL) m_TypeItemMap.GetNextAssoc(Position, wKey, pGameTypeItem);
-
- return pGameTypeItem;
- }
-
- //枚举类型
- CGameKindItem * CServerListManager::EmunGameKindItem(POSITION & Position)
- {
- //变量定义
- WORD wKey = 0;
- CGameKindItem * pGameKindItem = NULL;
-
- //获取对象
- if (Position == NULL) Position = m_KindItemMap.GetStartPosition();
- if (Position != NULL) m_KindItemMap.GetNextAssoc(Position, wKey, pGameKindItem);
-
- return pGameKindItem;
- }
-
- //枚举节点
- CGameNodeItem * CServerListManager::EmunGameNodeItem(POSITION & Position)
- {
- //变量定义
- WORD wKey = 0;
- CGameNodeItem * pGameNodeItem = NULL;
-
- //获取对象
- if (Position == NULL) Position = m_NodeItemMap.GetStartPosition();
- if (Position != NULL) m_NodeItemMap.GetNextAssoc(Position, wKey, pGameNodeItem);
-
- return pGameNodeItem;
- }
-
- //枚举房间
- CGameServerItem * CServerListManager::EmunGameServerItem(POSITION & Position)
- {
- //变量定义
- WORD wKey = 0;
- CGameServerItem * pGameServerItem = NULL;
-
- //获取对象
- if (Position == NULL) Position = m_ServerItemMap.GetStartPosition();
- if (Position != NULL) m_ServerItemMap.GetNextAssoc(Position, wKey, pGameServerItem);
-
- return pGameServerItem;
- }
-
- //枚举定制
- CGamePageItem * CServerListManager::EmunGamePageItem(POSITION & Position)
- {
- //变量定义
- WORD wKey = 0;
- CGamePageItem * pGamePageItem = NULL;
-
- //获取对象
- if (Position == NULL) Position = m_PageItemMap.GetStartPosition();
- if (Position != NULL) m_PageItemMap.GetNextAssoc(Position, wKey, pGamePageItem);
-
- return pGamePageItem;
- }
-
- //查找种类
- CGameTypeItem * CServerListManager::SearchGameType(WORD wTypeID)
- {
- CGameTypeItem * pGameTypeItem = NULL;
- m_TypeItemMap.Lookup(wTypeID, pGameTypeItem);
- return pGameTypeItem;
- }
-
- //查找类型
- CGameKindItem * CServerListManager::SearchGameKind(WORD wKindID)
- {
- CGameKindItem * pGameKindItem = NULL;
- m_KindItemMap.Lookup(wKindID, pGameKindItem);
- return pGameKindItem;
- }
-
- //查找节点
- CGameNodeItem * CServerListManager::SearchGameNode(WORD wNodeID)
- {
- CGameNodeItem * pGameNodeItem = NULL;
- m_NodeItemMap.Lookup(wNodeID, pGameNodeItem);
- return pGameNodeItem;
- }
-
- //推荐可用房间
- tagGameServer * CServerListManager::SearchUseServer(WORD Level, WORD wServerID, bool filterGoldSvr/* = true 2017-11-20 不要推荐金币场服务器*/)
- {
- CWHArray<tagGameServer*> List;
-
- CGameServerItem *pGameServerItem = NULL;
- POSITION Position = NULL;
-
- for (DWORD i = 0; i < GetGameServerCount(); i++)
- {
- //获取数据
- pGameServerItem = EmunGameServerItem(Position);
- if (pGameServerItem == NULL) break;
-
- ///--过滤金币场
- if (filterGoldSvr && pGameServerItem->m_GameServer.wNodeID > 0)
- {
- continue;
- }
-
- if (pGameServerItem->m_GameServer.wServerID == wServerID)
- {
- continue;
- }
-
- if (pGameServerItem->m_GameServer.dwOnLineCount >= pGameServerItem->m_GameServer.dwFullCount)
- {
- if (wServerID != pGameServerItem->m_GameServer.wServerID) continue;
- }
-
- if (pGameServerItem->m_GameServer.wServerLevel > Level)
- {
- if (wServerID != pGameServerItem->m_GameServer.wServerID) continue;
- }
-
- if (pGameServerItem->m_GameServer.bService < 1)
- {
- if (pGameServerItem->m_GameServer.bService < 0 && pGameServerItem->m_GameServer.wServerLevel == 1 && Level < 2)
- {
-
- }
- else
- {
- continue;
- }
- }
-
- List.Add(&(pGameServerItem->m_GameServer));
- }
-
- //配需 求最优解
- int iCha = 0;
- tagGameServer * ptagGameServer = NULL;
-
- for (int i = 0; i < List.GetCount(); i++)
- {
- tagGameServer* pTemp = List[i];
-
- if (pTemp)
- {
- if ((pTemp->wTableFullCount - pTemp->wTableOnlineCount) > iCha)
- {
- iCha = pTemp->wTableFullCount - pTemp->wTableOnlineCount;
- ptagGameServer = pTemp;
- }
- }
- }
-
- List.RemoveAll();
-
- return ptagGameServer;
- }
-
- //查找房间
- CGameServerItem * CServerListManager::SearchGameServer(WORD wServerID)
- {
- CGameServerItem * pGameServerItem = NULL;
- m_ServerItemMap.Lookup(wServerID, pGameServerItem);
- return pGameServerItem;
- }
-
- //查找定制
- CGamePageItem * CServerListManager::SearchGamePage(WORD wPageID)
- {
- CGamePageItem * pGamePageItem = NULL;
- m_PageItemMap.Lookup(wPageID, pGamePageItem);
- return pGamePageItem;
- }
-
- //////////////////////////////////////////////////////////////////////////////////
|