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

📄 dbusermanager.cpp

📁 奇迹世界data 服务器代码,研究游戏的朋友有帮助
💻 CPP
字号:
#include "StdAfx.h"
#include ".\dbusermanager.h"
#include <Macro.h>
#include "DBUser.h"

DBUserManager g_DBUserManager;

DBUserManager::DBUserManager(void)
{
	m_pUserPool				= new CMemoryPoolFactory<DBUser>;
	m_pUserHashTable		= new SolarHashTable<DBUser *>;
	m_pCachedUserHashTable	= new SolarHashTable<DBUser *>;
}

DBUserManager::~DBUserManager(void)
{
	ASSERT( m_pUserHashTable->GetDataNum() == 0 );
	SAFE_DELETE(m_pUserHashTable);
	ASSERT( m_pCachedUserHashTable->GetDataNum() == 0 );
	SAFE_DELETE(m_pCachedUserHashTable);

	SAFE_DELETE(m_pUserPool);
}

VOID DBUserManager::Init( DWORD dwPlayerPoolSize )
{
	m_pUserPool->Initialize( dwPlayerPoolSize, dwPlayerPoolSize/2+1 );
	m_pUserHashTable->Initialize( dwPlayerPoolSize );
	m_pCachedUserHashTable->Initialize( dwPlayerPoolSize );
}

VOID DBUserManager::Release()
{
	DBUser * pUser = NULL;
	m_pUserHashTable->SetFirst();
	while( pUser = m_pUserHashTable->GetNext() )
	{
		_FreeUser( pUser );
	}
	m_pUserHashTable->RemoveAll();

	m_pCachedUserHashTable->SetFirst();
	while( pUser = m_pCachedUserHashTable->GetNext() )
	{
		_FreeUser( pUser );
	}
	m_pCachedUserHashTable->RemoveAll();

	m_pUserPool->Release();
}

/*
VOID DBUserManager::addPlayer( DBUser * pUser )
{
	m_pPlayerHashTable->Add( pUser, pUser->GetUserKey() );
}

DBUser * DBUserManager::removePlayer( DWORD dwUserKey )
{
	DBUser * pUser = m_pPlayerHashTable->GetData( dwUserKey );
	m_pPlayerHashTable->Remove( dwUserKey );
	return pUser;
}*/

VOID DBUserManager::UpdatePlayer()
{
	DBUser * pUser = NULL;
	m_pUserHashTable->SetFirst();
	while( pUser = m_pUserHashTable->GetNext() )
	{
		pUser->Update();
	}


	m_pCachedUserHashTable->SetFirst();
	while( pUser = m_pCachedUserHashTable->GetNext() )
	{
		if( !pUser->UpdateForTimeOut() )
		{
			// 某矫府胶飘 蜡历甫 昏力茄促.
			RemoveUserFromCacheList(pUser->GetUserKey());
			_FreeUser(pUser);
		}
	}
}

DBUser * DBUserManager::_AllocUser()
{
	DBUser * pUser = m_pUserPool->Alloc();
	ASSERT(pUser);
	pUser->Init();
	return pUser;
}

VOID DBUserManager::_FreeUser( DBUser * pUser )
{
	ASSERT(pUser);
	pUser->Release();
	m_pUserPool->Free( pUser );
}
DBUser * DBUserManager::_RemoveUser( DWORD dwUserKey )
{
	DBUser * pUser = FindUser(dwUserKey);
	ASSERT( pUser );
	m_pUserHashTable->Remove( dwUserKey );
	return pUser;
}

VOID DBUserManager::_AddUser( DBUser * pUser )
{
	ASSERT( NULL == FindUser(pUser->GetUserKey()) );
	m_pUserHashTable->Add( pUser, pUser->GetUserKey() );
}
DBUser * DBUserManager::CreateUser_AddList( DWORD dwUserKey )
{
	DBUser * pUser = _AllocUser();
	pUser->SetUserKey( dwUserKey );
	_AddUser( pUser );
	return pUser;
}

DBUser * DBUserManager::FindUserFromCacheList( DWORD dwUserKey )
{
	return m_pCachedUserHashTable->GetData( dwUserKey );
}

VOID DBUserManager::MoveUserFromCacheList( DWORD dwUserKey )
{
	// 某矫府胶飘俊辑  哗辑, 老馆 府胶飘俊 持绰促.
	DBUser * pUser = RemoveUserFromCacheList( dwUserKey );
	ASSERT(pUser);
	if( !pUser) return;

	pUser->StopCacheExpiredTimer();

	_AddUser( pUser );
}

VOID DBUserManager::MoveUserToCacheList( DWORD dwUserKey )
{
	// 某矫府胶飘俊辑  持绰促., 老馆 府胶飘俊 猾促.
	DBUser * pUser = _RemoveUser( dwUserKey );
	ASSERT(pUser);
	if( !pUser) return;

	pUser->StartCacheExpiredTimer();

	AddUserToCacheList( pUser );
}

VOID DBUserManager::AddUserToCacheList( DBUser * pUesr )
{
	ASSERT( NULL == FindUserFromCacheList( pUesr->GetUserKey() ) );
	m_pCachedUserHashTable->Add( pUesr, pUesr->GetUserKey() );
}

DBUser * DBUserManager::RemoveUserFromCacheList( DWORD dwUserKey )
{
	DBUser * pUser = FindUserFromCacheList( dwUserKey );
	ASSERT(pUser);
	if(pUser)
		m_pCachedUserHashTable->Remove( dwUserKey );
	return pUser;
}
DBUser * DBUserManager::FindUser( DWORD dwUserKey )
{
	return m_pUserHashTable->GetData( dwUserKey );
}

VOID DBUserManager::DestroyUser( DWORD dwUserKey )
{
	DBUser * pUser = _RemoveUser(dwUserKey);
	ASSERT(pUser);
	if(!pUser) return;
	_FreeUser(pUser);
}
VOID DBUserManager::DestroyUserFromCacheList( DWORD dwUserKey )
{
	DBUser * pUser = RemoveUserFromCacheList(dwUserKey);
	ASSERT(pUser);
	if(!pUser) return;
	_FreeUser(pUser);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -