📄 rmlistenertable.cpp
字号:
#include "inetwork.h"
#include "RMListenerTable.h"
extern I4DyuchiNET *g_pINet;
CRMListenerTable::CRMListenerTable()
{
m_wConnect = 0;
m_wNotConnect = 0;
}
CRMListenerTable::~CRMListenerTable()
{
RemoveAllTable();
if (m_ppInfoTable)
{
delete [] m_ppInfoTable;
m_ppInfoTable = NULL;
}
}
BOOL CRMListenerTable::Create(DWORD num)
{
if(num < 1)
return FALSE;
m_dwMaxBucketNum = num;
m_ppInfoTable = NULL;
m_ppInfoTable = new RM_LISTENER_INFO*[num]; //m_ppInfoTable篮 (蜡历牢器 郴侩狼 林家蔼)狼 林家蔼阑 啊福挪寸..
memset(m_ppInfoTable,0,sizeof(RM_LISTENER_INFO*)*num);
return TRUE;
}
bool CRMListenerTable::Add(char* ip, BYTE type, DWORD dwConnectionIndex)
{
LP_SERVER_DATA pServerData;
pServerData = g_pServerTable->GetServerData( dwConnectionIndex );
RM_LISTENER_INFO* info = new RM_LISTENER_INFO;
memset(info, 0, sizeof(RM_LISTENER_INFO));
info->bConnectType = RM_TYPE_LISTENER; //概俺函荐 type苞绰 球彬府瘤 富巴!! 概俺函荐 type篮 立加, 固立加 咯何捞促.
info->dwConnectionIndex = dwConnectionIndex;
// info->dwServerType = pServerData->dwServerType;
strcpy(info->szIP, ip);
//立加 惑怕老锭 dwConnectionIndex啊 唱坷骨肺 弊锭 DLL俊 悸泼窍磊..
//type捞 1老锭父 dwConnectionIndex啊 0捞 酒匆巴捞促.. bucketnum 1老锭父 酒贰 if巩捞 荐青瞪 巴捞促.
if(dwConnectionIndex)
{
g_pINet->SetServerInfo(dwConnectionIndex, info);
}
AddInfo(info, type); //HashTable俊 眠啊
return true;
}
//type 捞 0捞搁 立加 救茄 惑怕, 1捞搁 立加茄 惑怕
void CRMListenerTable::AddInfo(RM_LISTENER_INFO* info, BYTE type)
{
if(type)
m_wConnect++;
else
m_wNotConnect++;
if (!m_ppInfoTable[ type ]) //m_ppInfoTable[index] 俊 郴侩捞 绝栏搁 褒龋 救栏肺.
{
m_ppInfoTable[ type ] = info;
info->pNextInfo = NULL;
info->pPrevInfo = NULL;
return;
}
RM_LISTENER_INFO* cur = m_ppInfoTable[ type ];
RM_LISTENER_INFO* prv = NULL;
while (cur)
{
prv = cur;
cur = cur->pNextInfo;
}
cur = prv->pNextInfo = info;
cur->pPrevInfo = prv;
cur->pNextInfo = NULL;
}
RM_LISTENER_INFO* CRMListenerTable::GetInfo(char *ip, BYTE type)
{
RM_LISTENER_INFO* cur = m_ppInfoTable[ type ];
while (cur)
{
if (!strcmp(ip,cur->szIP))
{
return cur;
}
cur = cur->pNextInfo;
}
return NULL;
}
void CRMListenerTable::Remove(char *ip, BYTE type)
{
RM_LISTENER_INFO* cur = m_ppInfoTable[ type ];
RM_LISTENER_INFO* next = NULL;
RM_LISTENER_INFO* prv = NULL;
while (cur)
{
prv = cur->pPrevInfo;
next = cur->pNextInfo;
if (!strcmp(ip, cur->szIP))
{
if (!prv) // if head
m_ppInfoTable[type] = next;
else
prv->pNextInfo = next;
if (next)
next->pPrevInfo = prv;
if(cur)
delete cur;
cur = NULL;
if(type)
m_wConnect--;
else
m_wNotConnect--;
return;
}
cur = cur->pNextInfo;
}
return;
}
void CRMListenerTable::RemoveAllTable()
{
RM_LISTENER_INFO* cur = NULL;
RM_LISTENER_INFO* next = NULL;
for (DWORD i=0; i<m_dwMaxBucketNum; i++)
{
cur = m_ppInfoTable[i];
while (cur)
{
next = cur->pNextInfo;
delete cur;
cur = next;
}
m_ppInfoTable[i] = NULL;
}
m_wConnect = 0;
m_wNotConnect = 0;
}
void CRMListenerTable::MoveToConnectStatus(char* ip, DWORD dwConnectionIndex)
{
Remove(ip, 0); //立加 救茄惑怕甫 窍唱 瘤快绊
Add(ip,1, dwConnectionIndex); //Connect茄 惑怕肺 Move
}
void CRMListenerTable::MoveToDisconnectStatus(char* ip)
{
Remove(ip, 1); //立加 茄惑怕甫 窍唱 瘤快绊
Add(ip,0); //Disconnect茄 惑怕肺 Move
}
//Table俊 度鞍篮 Data啊 乐绰瘤 绝绰瘤甫 犬牢茄促... 度鞍篮 Data啊 乐栏搁 True, 绝栏搁 FALSE
BOOL CRMListenerTable::CheckDuplicateIP(char* ip, BYTE type)
{
RM_LISTENER_INFO* cur = NULL;
RM_LISTENER_INFO* next = NULL;
cur = m_ppInfoTable[type]; //0捞 立加 救茄 惑怕捞聪...
while (cur)
{
next = cur->pNextInfo;
if(!strcmp(cur->szIP, ip)) //鞍篮霸 乐娇..
{
return TRUE;
}
cur = next;
}
return FALSE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -