📄 dbusermanager.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 + -