Files
wnmj/Servers/服务器组件/游戏服务器/ServerListManager.cpp

858 lines
18 KiB
C++
Raw Normal View History

2026-02-13 14:34:15 +08:00
#include "StdAfx.h"
#include "ServerListManager.h"
//////////////////////////////////////////////////////////////////////////////////
//<2F><><EFBFBD><EFBFBD><ECBAAF>
CGameTypeItem::CGameTypeItem()
{
//<2F><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>
ZeroMemory(&m_GameType,sizeof(m_GameType));
return;
}
//////////////////////////////////////////////////////////////////////////////////
//<2F><><EFBFBD><EFBFBD><ECBAAF>
CGameKindItem::CGameKindItem()
{
//<2F><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>
ZeroMemory(&m_GameKind,sizeof(m_GameKind));
return;
}
//////////////////////////////////////////////////////////////////////////////////
//<2F><><EFBFBD><EFBFBD><ECBAAF>
CGameNodeItem::CGameNodeItem()
{
//<2F><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>
ZeroMemory(&m_GameNode,sizeof(m_GameNode));
return;
}
//////////////////////////////////////////////////////////////////////////////////
//<2F><><EFBFBD><EFBFBD><ECBAAF>
CGameServerItem::CGameServerItem()
{
//<2F><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>
ZeroMemory(&m_GameServer,sizeof(m_GameServer));
return;
}
//////////////////////////////////////////////////////////////////////////////////
//<2F><><EFBFBD><EFBFBD><ECBAAF>
CGamePageItem::CGamePageItem()
{
//<2F><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>
ZeroMemory(&m_GamePage,sizeof(m_GamePage));
return;
}
//////////////////////////////////////////////////////////////////////////////////
//<2F><><EFBFBD><EFBFBD><ECBAAF>
CServerListManager::CServerListManager()
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
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;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CServerListManager::~CServerListManager()
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
WORD wKey=0;
//ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
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();
//ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
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();
//ɾ<><C9BE><EFBFBD>ڵ<EFBFBD>
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();
//ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
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();
//ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
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;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>
VOID CServerListManager::ResetServerList()
{
//<2F><><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>
DisuseKernelItem();
DisuseServerItem();
//<2F><><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>
CleanKernelItem();
CleanServerItem();
return;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD>ں<EFBFBD>
VOID CServerListManager::CleanKernelItem()
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
POSITION PositionType=m_TypeItemMap.GetStartPosition();
POSITION PositionKind=m_KindItemMap.GetStartPosition();
POSITION PositionNode=m_NodeItemMap.GetStartPosition();
POSITION PositionPage=m_PageItemMap.GetStartPosition();
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
while (PositionType!=NULL)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
WORD wTypeID=0;
CGameTypeItem * pGameTypeItem=NULL;
m_TypeItemMap.GetNextAssoc(PositionType,wTypeID,pGameTypeItem);
//ɾ<><C9BE><EFBFBD>ж<EFBFBD>
if (pGameTypeItem->m_bDisuse==true)
{
m_TypeItemMap.RemoveKey(wTypeID);
m_TypeItemBuffer.Add(pGameTypeItem);
}
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
while (PositionKind!=NULL)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
WORD wKindID=0;
CGameKindItem * pGameKindItem=NULL;
m_KindItemMap.GetNextAssoc(PositionKind,wKindID,pGameKindItem);
//ɾ<><C9BE><EFBFBD>ж<EFBFBD>
if (pGameKindItem->m_bDisuse==true)
{
m_KindItemMap.RemoveKey(wKindID);
m_KindItemBuffer.Add(pGameKindItem);
}
}
//<2F><><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD>
while (PositionNode!=NULL)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
WORD wNodeID=0;
CGameNodeItem * pGameNodeItem=NULL;
m_NodeItemMap.GetNextAssoc(PositionNode,wNodeID,pGameNodeItem);
//ɾ<><C9BE><EFBFBD>ж<EFBFBD>
if (pGameNodeItem->m_bDisuse==true)
{
m_NodeItemMap.RemoveKey(wNodeID);
m_NodeItemBuffer.Add(pGameNodeItem);
}
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
while (PositionPage!=NULL)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
WORD wPageID=0;
CGamePageItem * pGamePageItem=NULL;
m_PageItemMap.GetNextAssoc(PositionPage,wPageID,pGamePageItem);
//ɾ<><C9BE><EFBFBD>ж<EFBFBD>
if (pGamePageItem->m_bDisuse==true)
{
m_PageItemMap.RemoveKey(wPageID);
m_PageItemBuffer.Add(pGamePageItem);
}
}
return;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
VOID CServerListManager::CleanServerItem()
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
POSITION PositionServer=m_ServerItemMap.GetStartPosition();
//ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
while (PositionServer!=NULL)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
WORD wServerID=0;
CGameServerItem * pGameServerItem=NULL;
m_ServerItemMap.GetNextAssoc(PositionServer,wServerID,pGameServerItem);
//ɾ<><C9BE><EFBFBD>ж<EFBFBD>
if (pGameServerItem->m_bDisuse==true)
{
//ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_ServerItemMap.RemoveKey(wServerID);
m_ServerItemBuffer.Add(pGameServerItem);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
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;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD>ں<EFBFBD>
VOID CServerListManager::DisuseKernelItem()
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
WORD wKey=0;
DWORD dwKey=0;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CGameTypeItem * pGameTypeItem=NULL;
POSITION Position=m_TypeItemMap.GetStartPosition();
while (Position!=NULL)
{
m_TypeItemMap.GetNextAssoc(Position,wKey,pGameTypeItem);
pGameTypeItem->m_bDisuse=true;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CGameKindItem * pGameKindItem=NULL;
Position=m_KindItemMap.GetStartPosition();
while (Position!=NULL)
{
m_KindItemMap.GetNextAssoc(Position,wKey,pGameKindItem);
pGameKindItem->m_bDisuse=true;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD>
CGameNodeItem * pGameNodeItem=NULL;
Position=m_NodeItemMap.GetStartPosition();
while (Position!=NULL)
{
m_NodeItemMap.GetNextAssoc(Position,wKey,pGameNodeItem);
pGameNodeItem->m_bDisuse=true;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CGamePageItem * pGamePageItem=NULL;
Position=m_PageItemMap.GetStartPosition();
while (Position!=NULL)
{
m_PageItemMap.GetNextAssoc(Position,wKey,pGamePageItem);
pGamePageItem->m_bDisuse=true;
}
return;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
VOID CServerListManager::DisuseServerItem()
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
WORD wKey=0;
CGameServerItem * pGameServerItem=NULL;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
POSITION Position=m_ServerItemMap.GetStartPosition();
while (Position!=NULL)
{
m_ServerItemMap.GetNextAssoc(Position,wKey,pGameServerItem);
pGameServerItem->m_bDisuse=true;
}
return;
}
//ͳ<><CDB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
DWORD CServerListManager::CollectOnlineInfo()
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
DWORD dwOnLineCount=0L;
POSITION PositionKind=m_KindItemMap.GetStartPosition();
//ͳ<><CDB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
while (PositionKind!=NULL)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
WORD wKindID=0;
CGameKindItem * pGameKindItem=NULL;
m_KindItemMap.GetNextAssoc(PositionKind,wKindID,pGameKindItem);
//ͳ<><CDB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (pGameKindItem!=NULL) dwOnLineCount+=pGameKindItem->m_GameKind.dwOnLineCount;
}
return dwOnLineCount;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
DWORD CServerListManager::CollectOnlineInfo(WORD wKindID)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
DWORD dwOnLineCount=0L;
POSITION PositionServer=m_ServerItemMap.GetStartPosition();
//ö<>ٷ<EFBFBD><D9B7><EFBFBD>
while (PositionServer!=NULL)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
WORD wServerID=0;
CGameServerItem * pGameServerItem=NULL;
m_ServerItemMap.GetNextAssoc(PositionServer,wServerID,pGameServerItem);
//ͳ<><CDB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (pGameServerItem->m_GameServer.wKindID==wKindID)
{
dwOnLineCount+=pGameServerItem->m_GameServer.dwOnLineCount;
}
}
return dwOnLineCount;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
bool CServerListManager::InsertGameType(tagGameType * pGameType)
{
//Ч<><D0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ASSERT(pGameType!=NULL);
if (pGameType==NULL) return false;
//<2F><><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD>
CGameTypeItem * pGameTypeItem=NULL;
if (m_TypeItemMap.Lookup(pGameType->wTypeID,pGameTypeItem)==FALSE)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
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; }
//<2F><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>
ZeroMemory(pGameTypeItem,sizeof(CGameTypeItem));
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
pGameTypeItem->m_bDisuse=false;
CopyMemory(&pGameTypeItem->m_GameType,pGameType,sizeof(tagGameType));
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_TypeItemMap[pGameType->wTypeID]=pGameTypeItem;
return true;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
bool CServerListManager::InsertGameKind(tagGameKind * pGameKind)
{
//Ч<><D0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ASSERT(pGameKind!=NULL);
if (pGameKind==NULL) return false;
//<2F><><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD>
CGameKindItem * pGameKindItem=NULL;
if (m_KindItemMap.Lookup(pGameKind->wKindID,pGameKindItem)==FALSE)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
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; }
//<2F><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>
ZeroMemory(pGameKindItem,sizeof(CGameKindItem));
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
pGameKindItem->m_bDisuse=false;
CopyMemory(&pGameKindItem->m_GameKind,pGameKind,sizeof(tagGameKind));
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_KindItemMap[pGameKind->wKindID]=pGameKindItem;
return true;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD>
bool CServerListManager::InsertGameNode(tagGameNode * pGameNode)
{
//Ч<><D0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ASSERT(pGameNode!=NULL);
if (pGameNode==NULL) return false;
//<2F><><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD>
CGameNodeItem * pGameNodeItem=NULL;
if (m_NodeItemMap.Lookup(pGameNode->wNodeID,pGameNodeItem)==FALSE)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
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; }
//<2F><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>
ZeroMemory(pGameNodeItem,sizeof(CGameNodeItem));
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
pGameNodeItem->m_bDisuse=false;
CopyMemory(&pGameNodeItem->m_GameNode,pGameNode,sizeof(tagGameNode));
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_NodeItemMap[pGameNode->wNodeID]=pGameNodeItem;
return true;
}
//<2F><><EFBFBD><EFBFBD><EBB6A8>
bool CServerListManager::InsertGamePage(tagGamePage * pGamePage)
{
//Ч<><D0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ASSERT(pGamePage!=NULL);
if (pGamePage==NULL) return false;
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
CGamePageItem * pGamePageItem=NULL;
if (m_PageItemMap.Lookup(pGamePage->wPageID,pGamePageItem)==FALSE)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
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; }
//<2F><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>
ZeroMemory(pGamePageItem,sizeof(CGamePageItem));
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
pGamePageItem->m_bDisuse=false;
CopyMemory(&pGamePageItem->m_GamePage,pGamePage,sizeof(tagGamePage));
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_PageItemMap[pGamePage->wPageID]=pGamePageItem;
return true;
}
//<2F><><EFBFBD>뷿<EFBFBD><EBB7BF>
bool CServerListManager::InsertGameServer(tagGameServer * pGameServer)
{
//Ч<><D0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ASSERT(pGameServer!=NULL);
if (pGameServer==NULL) return false;
//<2F><><EFBFBD>ҷ<EFBFBD><D2B7><EFBFBD>
WORD wKindID=0;
DWORD dwOnLineCount=0L;
DWORD dwMaxPlayer=0L;
CGameServerItem * pGameServerItem=NULL;
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
if (m_ServerItemMap.Lookup(pGameServer->wServerID,pGameServerItem)==FALSE)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
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; }
//<2F><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>
ZeroMemory(pGameServerItem,sizeof(CGameServerItem));
}
else
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
wKindID=pGameServerItem->m_GameServer.wKindID;
dwOnLineCount=pGameServerItem->m_GameServer.dwOnLineCount;
dwMaxPlayer=pGameServerItem->m_GameServer.dwFullCount;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
pGameServerItem->m_bDisuse=false;
CopyMemory(&pGameServerItem->m_GameServer,pGameServer,sizeof(tagGameServer));
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (wKindID!=pGameServerItem->m_GameServer.wKindID)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CGameKindItem * pGameKindItemLast=NULL;
CGameKindItem * pGameKindItemCurrent=NULL;
//<2F><>ʷ<EFBFBD><CAB7><EFBFBD><EFBFBD>
if ((wKindID!=0)&&(m_KindItemMap.Lookup(wKindID,pGameKindItemLast)==TRUE))
{
pGameKindItemLast->m_GameKind.dwOnLineCount-=dwOnLineCount;
pGameKindItemLast->m_GameKind.dwFullCount-=dwMaxPlayer;
}
//<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>
if (m_KindItemMap.Lookup(pGameServer->wKindID,pGameKindItemCurrent)==TRUE)
{
pGameKindItemCurrent->m_GameKind.dwOnLineCount+=pGameServer->dwOnLineCount;
pGameKindItemCurrent->m_GameKind.dwFullCount+=pGameServer->dwFullCount;
}
}
else
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CGameKindItem * pGameKindItem=NULL;
m_KindItemMap.Lookup(wKindID,pGameKindItem);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
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;
}
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_ServerItemMap[pGameServer->wServerID]=pGameServerItem;
return true;
}
//ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
bool CServerListManager::DeleteGameType(WORD wTypeID)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CGameTypeItem * pGameTypeItem=NULL;
if (m_TypeItemMap.Lookup(wTypeID,pGameTypeItem)==FALSE) return false;
//ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_TypeItemMap.RemoveKey(wTypeID);
m_TypeItemBuffer.Add(pGameTypeItem);
return true;
}
//ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
bool CServerListManager::DeleteGameKind(WORD wKindID)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CGameKindItem * pGameKindItem=NULL;
if (m_KindItemMap.Lookup(wKindID,pGameKindItem)==FALSE) return false;
//ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_KindItemMap.RemoveKey(wKindID);
m_KindItemBuffer.Add(pGameKindItem);
//<2F><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>
ZeroMemory(pGameKindItem,sizeof(CGameKindItem));
return true;
}
//ɾ<><C9BE><EFBFBD>ڵ<EFBFBD>
bool CServerListManager::DeleteGameNode(WORD wNodeID)
{
//<2F><><EFBFBD>ҽڵ<D2BD>
CGameNodeItem * pGameNodeItem=NULL;
if (m_NodeItemMap.Lookup(wNodeID,pGameNodeItem)==FALSE) return false;
//ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_NodeItemMap.RemoveKey(wNodeID);
m_NodeItemBuffer.Add(pGameNodeItem);
//<2F><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>
ZeroMemory(pGameNodeItem,sizeof(CGameNodeItem));
return false;
}
//ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
bool CServerListManager::DeleteGameServer(WORD wServerID)
{
//<2F><><EFBFBD>ҷ<EFBFBD><D2B7><EFBFBD>
CGameServerItem * pGameServerItem=NULL;
if (m_ServerItemMap.Lookup(wServerID,pGameServerItem)==FALSE) return false;
//ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_ServerItemMap.RemoveKey(wServerID);
m_ServerItemBuffer.Add(pGameServerItem);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
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;
}
//ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
bool CServerListManager::DeleteGamePage(WORD wPageID)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CGamePageItem * pGamePageItem=NULL;
if (m_PageItemMap.Lookup(wPageID,pGamePageItem)==FALSE) return false;
//ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_PageItemMap.RemoveKey(wPageID);
m_PageItemBuffer.Add(pGamePageItem);
//<2F><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>
ZeroMemory(pGamePageItem,sizeof(CGamePageItem));
return true;
}
//ö<><C3B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CGameTypeItem * CServerListManager::EmunGameTypeItem(POSITION & Position)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
WORD wKey=0;
CGameTypeItem * pGameTypeItem=NULL;
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
if (Position==NULL) Position=m_TypeItemMap.GetStartPosition();
if (Position!=NULL) m_TypeItemMap.GetNextAssoc(Position,wKey,pGameTypeItem);
return pGameTypeItem;
}
//ö<><C3B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CGameKindItem * CServerListManager::EmunGameKindItem(POSITION & Position)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
WORD wKey=0;
CGameKindItem * pGameKindItem=NULL;
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
if (Position==NULL) Position=m_KindItemMap.GetStartPosition();
if (Position!=NULL) m_KindItemMap.GetNextAssoc(Position,wKey,pGameKindItem);
return pGameKindItem;
}
//ö<>ٽڵ<D9BD>
CGameNodeItem * CServerListManager::EmunGameNodeItem(POSITION & Position)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
WORD wKey=0;
CGameNodeItem * pGameNodeItem=NULL;
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
if (Position==NULL) Position=m_NodeItemMap.GetStartPosition();
if (Position!=NULL) m_NodeItemMap.GetNextAssoc(Position,wKey,pGameNodeItem);
return pGameNodeItem;
}
//ö<>ٷ<EFBFBD><D9B7><EFBFBD>
CGameServerItem * CServerListManager::EmunGameServerItem(POSITION & Position)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
WORD wKey=0;
CGameServerItem * pGameServerItem=NULL;
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
if (Position==NULL) Position=m_ServerItemMap.GetStartPosition();
if (Position!=NULL) m_ServerItemMap.GetNextAssoc(Position,wKey,pGameServerItem);
return pGameServerItem;
}
//ö<>ٶ<EFBFBD><D9B6><EFBFBD>
CGamePageItem * CServerListManager::EmunGamePageItem(POSITION & Position)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
WORD wKey=0;
CGamePageItem * pGamePageItem=NULL;
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
if (Position==NULL) Position=m_PageItemMap.GetStartPosition();
if (Position!=NULL) m_PageItemMap.GetNextAssoc(Position,wKey,pGamePageItem);
return pGamePageItem;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CGameTypeItem * CServerListManager::SearchGameType(WORD wTypeID)
{
CGameTypeItem * pGameTypeItem=NULL;
m_TypeItemMap.Lookup(wTypeID,pGameTypeItem);
return pGameTypeItem;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CGameKindItem * CServerListManager::SearchGameKind(WORD wKindID)
{
CGameKindItem * pGameKindItem=NULL;
m_KindItemMap.Lookup(wKindID,pGameKindItem);
return pGameKindItem;
}
//<2F><><EFBFBD>ҽڵ<D2BD>
CGameNodeItem * CServerListManager::SearchGameNode(WORD wNodeID)
{
CGameNodeItem * pGameNodeItem=NULL;
m_NodeItemMap.Lookup(wNodeID,pGameNodeItem);
return pGameNodeItem;
}
//<2F><><EFBFBD>ҷ<EFBFBD><D2B7><EFBFBD>
CGameServerItem * CServerListManager::SearchGameServer(WORD wServerID)
{
CGameServerItem * pGameServerItem=NULL;
m_ServerItemMap.Lookup(wServerID,pGameServerItem);
return pGameServerItem;
}
//<2F><><EFBFBD>Ҷ<EFBFBD><D2B6><EFBFBD>
CGamePageItem * CServerListManager::SearchGamePage(WORD wPageID)
{
CGamePageItem * pGamePageItem=NULL;
m_PageItemMap.Lookup(wPageID,pGamePageItem);
return pGamePageItem;
}
//////////////////////////////////////////////////////////////////////////////////