DragonNest/Server/DNCashServer/DNUserDeleteManager.cpp

134 lines
3.5 KiB
C++
Raw Normal View History

2024-12-19 09:48:26 +08:00
#include "stdafx.h"
#include "DNUserDeleteManager.h"
#include "Util.h"
#include "DNManager.h"
CDNUserDeleteManager* g_pUserDeleteManager = NULL;
CDNUserDeleteManager::CDNUserDeleteManager()
{
}
bool CDNUserDeleteManager::Add(UINT pAccountDBID, bool bDoLock)
{
DN_ASSERT(0 != pAccountDBID, "Invalid!");
TP_LOCK* pLock = (bDoLock)?(&m_Lock):(NULL);
if (pLock) {
DN_ASSERT(!m_Lock.IsLock(), "Already Locked!"); // !!! <20><><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> <20><><EFBFBD><EFBFBD> <20>ܺο<DCBA><CEBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ǿ<EFBFBD> <20><><EFBFBD><EFBFBD> <20>ʾƾ<CABE> <20><>
}
TP_LOCKAUTO aLock(pLock);
if (!pLock) {
DN_ASSERT(m_Lock.IsLock(), "Not Locked!"); // !!! <20><><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ܺο<DCBA><CEBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ǿ<EFBFBD> <20>־<EFBFBD><D6BE><EFBFBD> <20><>
}
std::pair<TP_LIST_ITR, bool> aRetVal = m_List.insert(TP_LIST::value_type(pAccountDBID, USERDELDAT(pAccountDBID)));
if (!aRetVal.second) {
USERDELDAT* aUserDelDat = (&(aRetVal.first->second));
DN_ASSERT(NULL != aUserDelDat, "Invalid!");
DN_ASSERT(aUserDelDat->IsSet(), "Invalid!");
// <20>̹<EFBFBD> <20>߰<EFBFBD><DFB0><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ݸ<EFBFBD> <20><><EFBFBD><EFBFBD>
aUserDelDat->SetTick();
return false;
}
return true;
}
void CDNUserDeleteManager::Remove(UINT pAccountDBID, bool bDoLock)
{
DN_ASSERT(0 != pAccountDBID, "Invalid!");
TP_LOCK* pLock = (bDoLock)?(&m_Lock):(NULL);
if (pLock) {
DN_ASSERT(!m_Lock.IsLock(), "Already Locked!"); // !!! <20><><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> <20><><EFBFBD><EFBFBD> <20>ܺο<DCBA><CEBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ǿ<EFBFBD> <20><><EFBFBD><EFBFBD> <20>ʾƾ<CABE> <20><>
}
TP_LOCKAUTO aLock(pLock);
if (!pLock) {
DN_ASSERT(m_Lock.IsLock(), "Not Locked!"); // !!! <20><><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ܺο<DCBA><CEBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ǿ<EFBFBD> <20>־<EFBFBD><D6BE><EFBFBD> <20><>
}
m_List.erase(pAccountDBID);
}
bool CDNUserDeleteManager::IsExist(UINT pAccountDBID, bool bDoLock) const
{
DN_ASSERT(0 != pAccountDBID, "Invalid!");
TP_LOCK* pLock = (bDoLock)?(&m_Lock):(NULL);
if (pLock) {
DN_ASSERT(!m_Lock.IsLock(), "Already Locked!"); // !!! <20><><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> <20><><EFBFBD><EFBFBD> <20>ܺο<DCBA><CEBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ǿ<EFBFBD> <20><><EFBFBD><EFBFBD> <20>ʾƾ<CABE> <20><>
}
TP_LOCKAUTO aLock(pLock);
if (!pLock) {
DN_ASSERT(m_Lock.IsLock(), "Not Locked!"); // !!! <20><><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ܺο<DCBA><CEBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ǿ<EFBFBD> <20>־<EFBFBD><D6BE><EFBFBD> <20><>
}
TP_LIST_CTR aIt = m_List.find(pAccountDBID);
if (m_List.end() != aIt) {
return true;
}
return false;
}
void CDNUserDeleteManager::GetList(TP_LISTAUTO& pList, bool bDoLock) const
{
TP_LOCK* pLock = (bDoLock)?(&m_Lock):(NULL);
if (pLock) {
DN_ASSERT(!m_Lock.IsLock(), "Already Locked!"); // !!! <20><><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> <20><><EFBFBD><EFBFBD> <20>ܺο<DCBA><CEBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ǿ<EFBFBD> <20><><EFBFBD><EFBFBD> <20>ʾƾ<CABE> <20><>
}
TP_LOCKAUTO aLock(pLock);
if (!pLock) {
DN_ASSERT(m_Lock.IsLock(), "Not Locked!"); // !!! <20><><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ܺο<DCBA><CEBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ǿ<EFBFBD> <20>־<EFBFBD><D6BE><EFBFBD> <20><>
}
TP_LIST_CTR aIt = m_List.begin();
for (; m_List.end() != aIt ; ++aIt) {
pList.push_back(aIt->second);
}
}
void CDNUserDeleteManager::DoUpdate()
{
DN_ASSERT(!m_Lock.IsLock(), "Invalid!");
// <20><> <20><><EFBFBD><EFBFBD> - <20><> <20>޼<EFBFBD><DEBC><EFBFBD><EFBFBD><EFBFBD> CDNUserRepository <20><>ü<EFBFBD><C3BC> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>Ŷ ó<><C3B3> <20>κа<CEBA> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E5BFA1> <20><><EFBFBD><EFBFBD><EFBFBD>Ǿ<EFBFBD><C7BE><EFBFBD> <20><>
TP_LISTAUTO aList;
{
TP_LOCKAUTO aLock(&m_Lock);
GetList(aList, false);
}
if (aList.empty()) {
return;
}
DWORD aCurTick = ::GetTickCount();
TP_LISTAUTO_CTR aIt = aList.begin();
for (; aList.end() != aIt ; ++aIt) {
const USERDELDAT* aUserDelDat = (&(*aIt));
DN_ASSERT(NULL != aUserDelDat, "Invalid!");
DN_ASSERT(aUserDelDat->IsSet(), "Invalid!");
if (CASHDELUSERDELAY_LIMITTICK <= GetTickTerm(aUserDelDat->m_OldTick, aCurTick)) {
bool bRetVal = g_pManager->DelUser(aUserDelDat->m_AccountDBID);
if (!bRetVal) {
// ??
}
Remove(aUserDelDat->m_AccountDBID, true);
}
}
}