166 lines
4.2 KiB
C++
166 lines
4.2 KiB
C++
|
|
#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)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|