⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rmlistenertable.cpp

📁 国内著名网络游戏dragon的服务端完整源码 内附完整数据库结构
💻 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 + -