DragonNest/Server/DNCashServer/DNThreadManager.cpp

166 lines
4.2 KiB
C++
Raw Normal View History

2024-12-19 09:48:26 +08:00
#include "StdAfx.h"
#include "DNThreadManager.h"
#include "DNIocpManager.h"
#include "DNServiceConnection.h"
#include "DNConnection.h"
#include "DNUserDeleteManager.h"
#if defined(PRE_ADD_HEARTBEAT_TO_SQL)
#include "DNSQLManager.h"
#include "DNSQLMembership.h"
#include "DNSQLWorld.h"
#include "Log.h"
extern TCashConfig g_Config;
#endif //#if defined(PRE_ADD_HEARTBEAT_TO_SQL)
#ifdef PRE_ADD_LIMITED_CASHITEM
#include "DNLimitedCashItemRepository.h"
#endif //#ifdef PRE_ADD_LIMITED_CASHITEM
#if defined(_KR) || defined(_US)
#include "DNBillingConnectionKR.h"
#elif defined(_TW)
#include "DNBillingConnectionTW.h"
#elif defined(_TH)
#include "DNBillingConnectionTH.h"
#endif
CDNThreadManager *g_pThreadManager = NULL;
CDNThreadManager::CDNThreadManager(void): CThreadManager()
{
}
CDNThreadManager::~CDNThreadManager(void)
{
}
#if defined(PRE_DEL_ONNULL)
void CDNThreadManager::OnCalled(CSocketContext *pSocketContext, char *pBuffer, TThreadData* pThreadData)
#else
void CDNThreadManager::OnCalled(CSocketContext *pSocketContext, char *pBuffer, int nThreadID)
#endif //#if defined(PRE_DEL_ONNULL)
{
#if defined(PRE_DEL_ONNULL)
int nThreadID = pThreadData->nThreadID;
if( pSocketContext == reinterpret_cast<CSocketContext*>(reinterpret_cast<void*>(DNProcessCheck::HeartbeatKey)))
{
DoUpdate(pThreadData->nThreadID, pThreadData->nLastHearbeatTick);
return;
}
#endif // #if defined(PRE_DEL_ONNULL)
switch(pSocketContext->m_dwKeyParam)
{
case CONNECTIONKEY_DEFAULT:
{
CDNConnection *pCon = (CDNConnection*)pSocketContext->GetParam();
if (!pCon) return;
pCon->FlushDBData( nThreadID );
}
break;
#if defined(PRE_ADD_LOGSERVER_HEARTBEAT)
case CONNECTIONKEY_LOG:
#endif
case CONNECTIONKEY_SERVICEMANAGER:
{
CDNServiceConnection *pCon = (CDNServiceConnection*)pSocketContext->GetParam();
if (!pCon) return;
pCon->FlushRecvData(0);
}
break;
#if defined(_KR) || defined(_US)
case CONNECTIONKEY_BILLING:
{
CDNBillingConnectionKR *pCon = (CDNBillingConnectionKR*)pSocketContext->GetParam();
if (!pCon) return;
pCon->FlushBillingData();
}
break;
#endif // _KR
#if defined(_TW)
case CONNECTIONKEY_TW_QUERY:
case CONNECTIONKEY_TW_SHOPITEM:
case CONNECTIONKEY_TW_COUPON:
case CONNECTIONKEY_TW_COUPON_ROLLBACK:
{
CDNBillingConnectionTW *pCon = (CDNBillingConnectionTW*)pSocketContext->GetParam();
if (!pCon) return;
pCon->FlushAuthData_TW();
}
break;
#endif //#if defined(_TW)
#if defined(_TH)
case CONNECTIONKEY_TH_QUERY:
case CONNECTIONKEY_TH_SHOPITEM:
{
CDNBillingConnectionTH *pCon = (CDNBillingConnectionTH*)pSocketContext->GetParam();
if (!pCon) return;
pCon->FlushAuthData_TH();
}
break;
#endif
}
g_pIocpManager->DetachSocket(pSocketContext, L"OnCalled");
}
#if defined(PRE_DEL_ONNULL)
void CDNThreadManager::DoUpdate(int nThreadID, ULONG &nHeartBeatTick)
#else // #if defined(PRE_DEL_ONNULL)
#if defined(PRE_ADD_HEARTBEAT_TO_SQL) && defined(_CASHSERVER)
void CDNThreadManager::OnNulled(int nThreadID, ULONG &nHeartBeatTick)
#else //#if defined(PRE_ADD_HEARTBEAT_TO_SQL) && defined(_CASHSERVER)
void CDNThreadManager::OnNulled(int nThreadID)
#endif //#if defined(PRE_ADD_HEARTBEAT_TO_SQL) && defined(_CASHSERVER)
#endif //#if defined(PRE_DEL_ONNULL)
{
#if !defined(PRE_DEL_ONNULL) // <20>̰<EFBFBD> ReconnectThread<61><64><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ű<EFBFBD>.
if (g_pUserDeleteManager) {
g_pUserDeleteManager->DoUpdate();
}
#endif
#ifdef PRE_ADD_LIMITED_CASHITEM
if (g_pLimitedCashItemRepository)
{
g_pLimitedCashItemRepository->DoUpdate(nThreadID);
}
#endif //#ifdef PRE_ADD_LIMITED_CASHITEM
#if defined(PRE_ADD_HEARTBEAT_TO_SQL)
if (g_pSQLManager)
{
ULONG nCurTick = timeGetTime();
if (nCurTick - nHeartBeatTick >= DNProcessCheck::SQLHeartbeatInterval)
{
nHeartBeatTick = timeGetTime();
CDNSQLMembership * pMembership = g_pSQLManager->FindMembershipDB(nThreadID);
if (pMembership)
{
if (pMembership->QueryHeartbeat() != ERROR_NONE)
_DANGER_POINT();
}
for (int i = 0; i < g_Config.nWorldDBCount; i++)
{
CDNSQLWorld * pWorld = g_pSQLManager->FindWorldDB(nThreadID, g_Config.WorldDB[i].nWorldSetID);
if (pWorld)
{
if (pWorld->QueryHeartbeat() != ERROR_NONE)
_DANGER_POINT();
}
}
}
}
#endif //#if defined(PRE_ADD_HEARTBEAT_TO_SQL)
}