658 lines
No EOL
23 KiB
C++
658 lines
No EOL
23 KiB
C++
#include "StdAfx.h"
|
|
#include "DNEtcTask.h"
|
|
#include "DNConnection.h"
|
|
#include "DNSQLConnectionManager.h"
|
|
#include "DNSQLMembership.h"
|
|
#include "DNSQLWorld.h"
|
|
#include "TimeSet.h"
|
|
#include "Log.h"
|
|
#if defined( PRE_FIX_67546 )
|
|
#include "DNIocpManager.h"
|
|
#endif
|
|
extern TDBConfig g_Config;
|
|
|
|
CDNEtcTask::CDNEtcTask(CDNConnection* pConnection)
|
|
: CDNMessageTask(pConnection)
|
|
{
|
|
|
|
}
|
|
|
|
CDNEtcTask::~CDNEtcTask(void)
|
|
{
|
|
}
|
|
|
|
void CDNEtcTask::OnRecvMessage(int nThreadID, int nMainCmd, int nSubCmd, char* pData)
|
|
{
|
|
CDNSQLMembership *pMembershipDB = NULL;
|
|
CDNSQLWorld *pWorldDB = NULL;
|
|
int nRet = ERROR_DB;
|
|
|
|
switch (nSubCmd)
|
|
{
|
|
case QUERY_UPDATEQUERYQUEUE:
|
|
{
|
|
// 주의!!! - 실제 DB 작업 수행은 본 메서드를 재귀호출 하여 이루어지며 재귀호출 시 본 패킷 (MAINCMD_ETC / QUERY_UPDATEQUERYQUEUE) 은 절대 포함되어선 않됨 !!!
|
|
|
|
TDBQueryQueue* pEtc = reinterpret_cast<TDBQueryQueue*>(pData);
|
|
DN_ASSERT(NULL != pEtc, "Invalid!");
|
|
DN_ASSERT(pEtc->CheckIntegrity(), "Invalid!");
|
|
|
|
if (DBQUERYAUTOCHKSUM != pEtc->m_nCheckSum) { // 20091022 패킷 처리 시 무결성 체크를 위해 임시 추가 ??? (b4nfter)
|
|
DN_BREAK;
|
|
}
|
|
|
|
for (int nCurPtr = 0 ; pEtc->m_nSize > nCurPtr ; ) {
|
|
TDBQueryData* pDBQueryData = pEtc->At(nCurPtr);
|
|
DN_ASSERT(NULL != pDBQueryData, "Check!");
|
|
|
|
if (MAINCMD_ETC == pDBQueryData->cMainCmd && QUERY_UPDATEQUERYQUEUE == pDBQueryData->cSubCmd) {
|
|
DN_ASSERT(0, "Invalid!"); // 해당 메인명령은 본 DB 누적작업 등록용 이므로 사용할 이유가 없으며 사용 시 무한재귀에 빠질 수도 있음 ?
|
|
}
|
|
|
|
m_pConnection->DBMessageProcess(reinterpret_cast<char*>(pDBQueryData), nThreadID); // P.S.> 이 부분의 함수 재귀호출 처리를 위해 TDBQueryData 는 DNTPacket 와 동일한 구조를 가지도록 의도적으로 설계되었음 (차후 변경 필요 시 이와같은 설계 의도에 영향을 미치지 않도록 주의할 것 !!!)
|
|
|
|
nCurPtr += (sizeof(DNTPacketHeader) + pDBQueryData->iLen);
|
|
}
|
|
}
|
|
break;
|
|
|
|
case QUERY_EVENTLIST:
|
|
{
|
|
TQEventList * pEtc = (TQEventList*)pData;
|
|
TAEventList Etc;
|
|
memset(&Etc, 0, sizeof(Etc));
|
|
|
|
Etc.cWorldSetID = pEtc->cWorldSetID;
|
|
Etc.nRetCode = ERROR_DB;
|
|
#if defined(PRE_ADD_WORLD_EVENT)
|
|
pMembershipDB = g_SQLConnectionManager.FindMembershipDB(nThreadID);
|
|
if (pMembershipDB)
|
|
{
|
|
Etc.nRetCode = pMembershipDB->QueryEventList(pEtc, &Etc);
|
|
}
|
|
else
|
|
g_Log.Log(LogType::_ERROR, pEtc->cWorldSetID, pEtc->nAccountDBID, 0, 0, L"[QUERY_EVENTLIST:%d] pMembershipDB Error\r\n", pEtc->cWorldSetID);
|
|
#else //#if defined(PRE_ADD_WORLD_EVENT)
|
|
pWorldDB = g_SQLConnectionManager.FindWorldDB(nThreadID, pEtc->cWorldSetID);
|
|
if (pWorldDB)
|
|
{
|
|
Etc.nRetCode = pWorldDB->QueryEventList(pEtc, &Etc);
|
|
}
|
|
else
|
|
g_Log.Log(LogType::_ERROR, pEtc->cWorldSetID, pEtc->nAccountDBID, 0, 0, L"[QUERY_EVENTLIST:%d] pWorldDB Error\r\n", pEtc->cWorldSetID);
|
|
#endif // #if defined(PRE_ADD_WORLD_EVENT)
|
|
|
|
m_pConnection->AddSendData(nMainCmd, nSubCmd, (char*)&Etc, sizeof(Etc) - sizeof(Etc.EventList) + (Etc.cCount * sizeof(TEventInfo)));
|
|
}
|
|
break;
|
|
|
|
#ifdef PRE_MOD_RESTRICT_IDENTITY_IP
|
|
case QUERY_GET_SIMPLECONFIG:
|
|
{
|
|
TQSimpleConfig * pPacket = (TQSimpleConfig*)pData;
|
|
TASimpleConfig packet;
|
|
memset(&packet, 0, sizeof(TASimpleConfig));
|
|
|
|
packet.nRetCode = ERROR_DB;
|
|
|
|
pMembershipDB = g_SQLConnectionManager.FindMembershipDB(nThreadID);
|
|
if (pMembershipDB)
|
|
{
|
|
pMembershipDB->QueryGetSimpleConfigValue(&packet);
|
|
}
|
|
else
|
|
g_Log.Log(LogType::_RESTRICTIP, pPacket->cWorldSetID, pPacket->nAccountDBID, 0, 0, L"[QUERY_GET_SIMPLECONFIG] pMembershipDB Error\r\n");
|
|
|
|
m_pConnection->AddSendData(nMainCmd, nSubCmd, (char*)&packet, sizeof(packet) - sizeof(packet.Configs) + (packet.cCount * sizeof(SimpleConfig::ConfigData)));
|
|
}
|
|
break;
|
|
#endif //#ifdef PRE_MOD_RESTRICT_IDENTITY_IP
|
|
|
|
#ifdef PRE_ADD_SEETMAINTENANCEFLAG
|
|
case QUERY_MAINTENANCEFLAG:
|
|
{
|
|
TQMaintenanceInfo * pPacket = reinterpret_cast<TQMaintenanceInfo*>(pData);
|
|
|
|
pMembershipDB = g_SQLConnectionManager.FindMembershipDB(nThreadID);
|
|
if (pMembershipDB)
|
|
{
|
|
pMembershipDB->QuerySetMaintenanceFlag(pPacket->nFlag);
|
|
}
|
|
}
|
|
break;
|
|
#endif //#ifdef PRE_ADD_SEETMAINTENANCEFLAG
|
|
|
|
case QUERY_GET_DBSID:
|
|
{
|
|
TAGetDBSID packet;
|
|
memset(&packet, 0, sizeof(TAGetDBSID));
|
|
packet.nServerID = g_Config.nManagedID;
|
|
|
|
m_pConnection->AddSendData(nMainCmd, nSubCmd, (char*)&packet, sizeof(packet));
|
|
}
|
|
break;
|
|
|
|
case QUERY_GETGAMEOPTION:
|
|
{
|
|
TQGetGameOption * pOption = (TQGetGameOption*)pData;
|
|
|
|
TAGetGameOption packet;
|
|
memset(&packet, 0, sizeof(packet));
|
|
|
|
packet.nAccountDBID = pOption->nAccountDBID;
|
|
packet.biCharacterDBID = pOption->biCharacterDBID;
|
|
packet.nRetCode = ERROR_DB;
|
|
|
|
pMembershipDB = g_SQLConnectionManager.FindMembershipDB(nThreadID);
|
|
if (pMembershipDB){
|
|
packet.nRetCode = pMembershipDB->QueryGetGameOption(pOption->nAccountDBID, packet.Option);
|
|
}
|
|
else
|
|
g_Log.Log(LogType::_ERROR, pOption->cWorldSetID, pOption->nAccountDBID, pOption->biCharacterDBID, 0, L"[QUERY_GETGAMEOPTION:%d] pMembershipDB Error\r\n", pOption->cWorldSetID);
|
|
|
|
m_pConnection->AddSendData(nMainCmd, nSubCmd, (char*)&packet, sizeof(packet));
|
|
}
|
|
break;
|
|
|
|
case QUERY_SETGAMEOPTION:
|
|
{
|
|
TQSetGameOption * pOption = (TQSetGameOption*)pData;
|
|
|
|
pMembershipDB = g_SQLConnectionManager.FindMembershipDB(nThreadID);
|
|
if (pMembershipDB){
|
|
pMembershipDB->QueryModGameOption(pOption->nAccountDBID, pOption->Option);
|
|
}
|
|
else
|
|
g_Log.Log(LogType::_ERROR, pOption->cWorldSetID, pOption->nAccountDBID, pOption->biCharacterDBID, 0, L"[QUERY_GETGAMEOPTION:%d] pMembershipDB Error\r\n", pOption->cWorldSetID);
|
|
}
|
|
break;
|
|
|
|
case QUERY_RESTRAINT:
|
|
{
|
|
TQRestraint * pRestraint = (TQRestraint*)pData;
|
|
|
|
TARestraint packet;
|
|
memset(&packet, 0, sizeof(TARestraint));
|
|
|
|
packet.nAccountDBID = pRestraint->nAccountDBID;
|
|
packet.nRetCode = ERROR_DB;
|
|
|
|
pWorldDB = g_SQLConnectionManager.FindWorldDB(nThreadID, pRestraint->cWorldSetID);
|
|
if (pWorldDB){
|
|
|
|
}
|
|
else
|
|
g_Log.Log(LogType::_ERROR, pRestraint->cWorldSetID, pRestraint->nAccountDBID, 0, 0, L"[QUERY_RESTRAINT:%d] pWorldDB Error\r\n", pRestraint->cWorldSetID);
|
|
|
|
m_pConnection->AddSendData(nMainCmd, nSubCmd, (char*)&packet, sizeof(packet) - sizeof(packet.restraint) + (packet.cCount * sizeof(TRestraint)));
|
|
}
|
|
break;
|
|
|
|
case QUERY_SETRESTRAINT:
|
|
{
|
|
TQSetRestraint * pAddRestraint = (TQSetRestraint*)pData;
|
|
|
|
pMembershipDB = g_SQLConnectionManager.FindMembershipDB( nThreadID );
|
|
if (pMembershipDB)
|
|
{
|
|
TIMESTAMP_STRUCT _tStartTime, _tEndTime;
|
|
|
|
// 시작시각
|
|
CTimeSet TimeSet;
|
|
memcpy( &_tStartTime, &TimeSet.GetDbTimeStamp(), sizeof(TIMESTAMP_STRUCT ));
|
|
// 끝시간
|
|
TimeSet.AddSecond( ONEDAYSEC * 30 );
|
|
memcpy( &_tEndTime, &TimeSet.GetDbTimeStamp(), sizeof(TIMESTAMP_STRUCT ));
|
|
|
|
#ifdef PRE_ADD_ABUSE_ACCOUNT_RESTRAINT
|
|
int nRetCode = pMembershipDB->QueryAddRestraint((DBDNWorldDef::RestraintTargetCode::eCode)pAddRestraint->cTargetCode, pAddRestraint->nAccountDBID, \
|
|
pAddRestraint->biCharacterDBID, pAddRestraint->nDolisReasonCode, (DBDNWorldDef::RestraintTypeCode::eCode)pAddRestraint->cRestraintCode, pAddRestraint->wszRestraintreasonForDolis, pAddRestraint->wszRestraintreason, _tStartTime, _tEndTime);
|
|
#else //#ifdef PRE_ADD_ABUSE_ACCOUNT_RESTRAINT
|
|
//ReasonID 110번은 상수로 박혀 있으며, 이쪽 번호 변경시 황시연씨에게 문의 바람.
|
|
int nRetCode = pMembershipDB->QueryAddRestraint((DBDNWorldDef::RestraintTargetCode::eCode)pAddRestraint->cTargetCode, pAddRestraint->nAccountDBID, \
|
|
pAddRestraint->biCharacterDBID, 110, (DBDNWorldDef::RestraintTypeCode::eCode)pAddRestraint->cRestraintCode, pAddRestraint->wszRestraintreasonForDolis, pAddRestraint->wszRestraintreason, _tStartTime, _tEndTime);
|
|
#endif //#ifdef PRE_ADD_ABUSE_ACCOUNT_RESTRAINT
|
|
|
|
if (nRetCode != ERROR_NONE)
|
|
g_Log.Log(LogType::_ERROR, pAddRestraint->cWorldSetID, pAddRestraint->nAccountDBID, 0, 0, L"[QUERY_SETRESTRAINT:%d] Error[Code:%d]\r\n", pAddRestraint->cWorldSetID, nRetCode);
|
|
}
|
|
else
|
|
g_Log.Log(LogType::_ERROR, pAddRestraint->cWorldSetID, pAddRestraint->nAccountDBID, 0, 0, L"[QUERY_SETRESTRAINT:%d] pMembershipDB Error\r\n", pAddRestraint->cWorldSetID);
|
|
}
|
|
break;
|
|
|
|
case QUERY_GET_KEYSETTING_OPTION:
|
|
{
|
|
TQGetKeySettingOption* pEtc = reinterpret_cast<TQGetKeySettingOption*>(pData);
|
|
|
|
TAGetKeySettingOption Etc;
|
|
memset( &Etc, 0, sizeof(Etc) );
|
|
|
|
Etc.nRetCode = ERROR_DB;
|
|
Etc.nAccountDBID = pEtc->nAccountDBID;
|
|
|
|
pMembershipDB = g_SQLConnectionManager.FindMembershipDB( nThreadID );
|
|
if (pMembershipDB)
|
|
Etc.nRetCode = pMembershipDB->QueryGetKeySettingOption( pEtc->nAccountDBID, &Etc.sKeySetting );
|
|
|
|
if( Etc.nRetCode != ERROR_NONE )
|
|
g_Log.Log(LogType::_ERROR, pEtc->cWorldSetID, pEtc->nAccountDBID, 0, 0, L"[QUERY_GET_KEYSETTING_OPTION:%d] (Ret:%d)\r\n", pEtc->cWorldSetID, Etc.nRetCode);
|
|
|
|
break;
|
|
}
|
|
|
|
case QUERY_MOD_KEYSETTING_OPTION:
|
|
{
|
|
TQModKeySettingOption* pEtc = reinterpret_cast<TQModKeySettingOption*>(pData);
|
|
|
|
TAModKeySettingOption Etc;
|
|
memset( &Etc, 0, sizeof(Etc) );
|
|
|
|
Etc.nRetCode = ERROR_DB;
|
|
Etc.nAccountDBID = pEtc->nAccountDBID;
|
|
|
|
pMembershipDB = g_SQLConnectionManager.FindMembershipDB( nThreadID );
|
|
if (pMembershipDB)
|
|
Etc.nRetCode = pMembershipDB->QueryModKeySettingOption(pEtc, &Etc);
|
|
|
|
if( Etc.nRetCode != ERROR_NONE )
|
|
g_Log.Log(LogType::_ERROR, pEtc->cWorldSetID, pEtc->nAccountDBID, 0, 0, L"[QUERY_MOD_KEYSETTING_OPTION:%d] (Ret:%d)\r\n", pEtc->cWorldSetID, Etc.nRetCode);
|
|
|
|
break;
|
|
}
|
|
|
|
case QUERY_GET_PADSETTING_OPTION:
|
|
{
|
|
TQGetPadSettingOption* pEtc = reinterpret_cast<TQGetPadSettingOption*>(pData);
|
|
|
|
TAGetPadSettingOption Etc;
|
|
memset( &Etc, 0, sizeof(Etc) );
|
|
|
|
Etc.nRetCode = ERROR_DB;
|
|
Etc.nAccountDBID = pEtc->nAccountDBID;
|
|
|
|
pMembershipDB = g_SQLConnectionManager.FindMembershipDB( nThreadID );
|
|
if (pMembershipDB)
|
|
Etc.nRetCode = pMembershipDB->QueryGetPadSettingOption( pEtc->nAccountDBID, &Etc.sPadSetting );
|
|
|
|
if( Etc.nRetCode != ERROR_NONE )
|
|
g_Log.Log(LogType::_ERROR, pEtc->cWorldSetID, pEtc->nAccountDBID, 0, 0, L"[QUERY_GET_PADSETTING_OPTION:%d] (Ret:%d)\r\n", pEtc->cWorldSetID, Etc.nRetCode);
|
|
|
|
break;
|
|
}
|
|
|
|
case QUERY_MOD_PADSETTING_OPTION:
|
|
{
|
|
TQModPadSettingOption* pEtc = reinterpret_cast<TQModPadSettingOption*>(pData);
|
|
|
|
TAModPadSettingOption Etc;
|
|
memset( &Etc, 0, sizeof(Etc) );
|
|
|
|
Etc.nRetCode = ERROR_DB;
|
|
Etc.nAccountDBID = pEtc->nAccountDBID;
|
|
|
|
pMembershipDB = g_SQLConnectionManager.FindMembershipDB( nThreadID );
|
|
if (pMembershipDB)
|
|
Etc.nRetCode = pMembershipDB->QueryModPadSettingOption(pEtc, &Etc);
|
|
|
|
if( Etc.nRetCode != ERROR_NONE )
|
|
g_Log.Log(LogType::_ERROR, pEtc->cWorldSetID, pEtc->nAccountDBID, 0, 0, L"[QUERY_MOD_PADSETTING_OPTION:%d] (Ret:%d)\r\n", pEtc->cWorldSetID, Etc.nRetCode);
|
|
|
|
break;
|
|
}
|
|
|
|
case QUERY_SET_PROFILE:
|
|
{
|
|
TQSetProfile *pEtc = (TQSetProfile*)pData;
|
|
|
|
TASetProfile Etc;
|
|
memset( &Etc, 0, sizeof(Etc) );
|
|
|
|
Etc.nRetCode = ERROR_DB;
|
|
Etc.nAccountDBID = pEtc->nAccountDBID;
|
|
|
|
// 서버에서 전송한 데이터를 그대로 반환 - 성공하면 서버에서 캐릭터 메모리로 적용한다.
|
|
Etc.sProfile.cGender = pEtc->sProfile.cGender;
|
|
_wcscpy(Etc.sProfile.wszGreeting, _countof(Etc.sProfile.wszGreeting), pEtc->sProfile.wszGreeting, (int)wcslen(pEtc->sProfile.wszGreeting));
|
|
Etc.sProfile.bOpenPublic = pEtc->sProfile.bOpenPublic;
|
|
|
|
pWorldDB = g_SQLConnectionManager.FindWorldDB(nThreadID, pEtc->cWorldSetID);
|
|
if (pWorldDB)
|
|
Etc.nRetCode = pWorldDB->QuerySetProfile(pEtc->biCharacterDBID, pEtc->sProfile);
|
|
|
|
if( Etc.nRetCode != ERROR_NONE )
|
|
g_Log.Log(LogType::_ERROR, pEtc->cWorldSetID, pEtc->nAccountDBID, pEtc->biCharacterDBID, 0, L"[CDBID:%lld] [QUERY_SET_PROFILE:%d] (Ret:%d)\r\n", pEtc->biCharacterDBID, pEtc->cWorldSetID, Etc.nRetCode);
|
|
|
|
m_pConnection->AddSendData( nMainCmd, nSubCmd, reinterpret_cast<char*>(&Etc), sizeof(Etc) );
|
|
}
|
|
break;
|
|
|
|
case QUERY_GET_PROFILE:
|
|
{
|
|
TQGetProfile *pEtc = (TQGetProfile*)pData;
|
|
|
|
TAGetProfile Etc;
|
|
memset( &Etc, 0, sizeof(Etc) );
|
|
|
|
Etc.nRetCode = ERROR_DB;
|
|
Etc.nAccountDBID = pEtc->nAccountDBID;
|
|
|
|
pWorldDB = g_SQLConnectionManager.FindWorldDB(nThreadID, pEtc->cWorldSetID);
|
|
if (pWorldDB){
|
|
nRet = pWorldDB->QueryGetProfile(pEtc->biCharacterDBID, Etc.sProfile);
|
|
Etc.nRetCode = nRet;
|
|
if( nRet == 103212 ) nRet = ERROR_NONE; // 103212는 프로필이 설정되지 않은 경우로 DB에러는 아니다. - 쓸데없는 로그를 찍지 않기 위해~
|
|
if (nRet != ERROR_NONE){
|
|
g_Log.Log(LogType::_ERROR, pEtc->cWorldSetID, pEtc->nAccountDBID, pEtc->biCharacterDBID, 0, L"[CDBID:%lld] [QUERY_GET_PROFILE:%d] (Ret:%d)\r\n", pEtc->biCharacterDBID, pEtc->cWorldSetID, nRet);
|
|
}
|
|
}
|
|
m_pConnection->AddSendData( nMainCmd, nSubCmd, reinterpret_cast<char*>(&Etc), sizeof(Etc) );
|
|
}
|
|
break;
|
|
|
|
case QUERY_ADD_ABUSELOG:
|
|
{
|
|
TQAddAbuseLog *pEtc = (TQAddAbuseLog*)pData;
|
|
|
|
pWorldDB = g_SQLConnectionManager.FindWorldDB(nThreadID, pEtc->cWorldSetID);
|
|
if (pWorldDB){
|
|
nRet = pWorldDB->QueryAddAbuseLog(pEtc);
|
|
if (nRet != ERROR_NONE){
|
|
g_Log.Log(LogType::_ERROR, pEtc->cWorldSetID, pEtc->nAccountDBID, pEtc->biCharacterDBID, 0, L"[CDBID:%lld] [QUERY_ADD_ABUSELOG:%d] (Ret:%d)\r\n", pEtc->biCharacterDBID, pEtc->cWorldSetID, nRet);
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
|
|
case QUERY_ADD_ABUSEMONITOR:
|
|
{
|
|
TQAddAbuseMonitor* pEtc = reinterpret_cast<TQAddAbuseMonitor*>(pData);
|
|
pWorldDB = g_SQLConnectionManager.FindWorldDB(nThreadID, pEtc->cWorldSetID);
|
|
if( pWorldDB )
|
|
pWorldDB->QueryAddAbuseMonitor( pEtc );
|
|
break;
|
|
}
|
|
|
|
case QUERY_DEL_ABUSEMONITOR:
|
|
{
|
|
TQDelAbuseMonitor* pEtc = reinterpret_cast<TQDelAbuseMonitor*>(pData);
|
|
pWorldDB = g_SQLConnectionManager.FindWorldDB(nThreadID, pEtc->cWorldSetID);
|
|
if( pWorldDB )
|
|
pWorldDB->QueryDelAbuseMonitor( pEtc );
|
|
break;
|
|
}
|
|
|
|
case QUERY_GET_ABUSEMONITOR:
|
|
{
|
|
TQGetAbuseMonitor* pEtc = reinterpret_cast<TQGetAbuseMonitor*>(pData);
|
|
|
|
TAGetAbuseMonitor Etc;
|
|
memset( &Etc, 0, sizeof(Etc) );
|
|
|
|
Etc.nRetCode = ERROR_DB;
|
|
Etc.nAccountDBID = pEtc->nAccountDBID;
|
|
|
|
pWorldDB = g_SQLConnectionManager.FindWorldDB(nThreadID, pEtc->cWorldSetID);
|
|
if( pWorldDB )
|
|
Etc.nRetCode = pWorldDB->QueryGetAbuseMonitor( pEtc, &Etc );
|
|
|
|
m_pConnection->AddSendData( nMainCmd, nSubCmd, reinterpret_cast<char*>(&Etc), sizeof(Etc) );
|
|
break;
|
|
}
|
|
|
|
case QUERY_GET_WHOLE_ABUSEMONITOR:
|
|
{
|
|
TQGetWholeAbuseMonitor * pPacket = (TQGetWholeAbuseMonitor*)pData;
|
|
|
|
TAGetWholeAbuseMonitor packet;
|
|
memset(&packet, 0, sizeof(TAGetWholeAbuseMonitor));
|
|
|
|
packet.nAccountDBID = pPacket->nAccountDBID;
|
|
packet.nRetCode = ERROR_DB;
|
|
#if defined(PRE_ADD_MULTILANGUAGE)
|
|
packet.cSelectedLang = pPacket->cSelectedLang;
|
|
#endif //#if defined(PRE_ADD_MULTILANGUAGE)
|
|
|
|
pWorldDB = g_SQLConnectionManager.FindWorldDB(nThreadID, pPacket->cWorldSetID);
|
|
if( pWorldDB )
|
|
packet.nRetCode = pWorldDB->QueryGetWholeAbuseMonitor(pPacket, &packet);
|
|
|
|
m_pConnection->AddSendData( nMainCmd, nSubCmd, reinterpret_cast<char*>(&packet), sizeof(TAGetWholeAbuseMonitor) - sizeof(packet.Abuse) + (sizeof(TAbuseMonitor) * packet.cCount) );
|
|
break;
|
|
}
|
|
|
|
case QUERY_VALIDATE_SECONDAUTH:
|
|
{
|
|
TQValidateSecondAuth* pEtc = reinterpret_cast<TQValidateSecondAuth*>(pData);
|
|
|
|
pMembershipDB = g_SQLConnectionManager.FindMembershipDB( nThreadID );
|
|
|
|
TAValidateSecondAuth Etc;
|
|
memset( &Etc, 0, sizeof(Etc) );
|
|
|
|
Etc.nAccountDBID = pEtc->nAccountDBID;
|
|
Etc.nAuthCheckType = pEtc->nAuthCheckType;
|
|
Etc.nRetCode = ERROR_DB;
|
|
|
|
if( pMembershipDB )
|
|
Etc.nRetCode = pMembershipDB->QueryValidataSecondAuthPassphrase( pEtc->nAccountDBID, pEtc->wszPW, Etc.cFailCount );
|
|
|
|
m_pConnection->AddSendData( nMainCmd, nSubCmd, reinterpret_cast<char*>(&Etc), sizeof(Etc) );
|
|
break;
|
|
}
|
|
case QUERY_LOGOUT:
|
|
{
|
|
TQLogout *pUpdate = (TQLogout*)pData;
|
|
|
|
pMembershipDB = g_SQLConnectionManager.FindMembershipDB(nThreadID);
|
|
if (pMembershipDB){
|
|
#if defined (_KR)
|
|
nRet = pMembershipDB->QueryLogout(pUpdate->nAccountDBID, pUpdate->nSessionID, pUpdate->szMachineID);
|
|
#else
|
|
nRet = pMembershipDB->QueryLogout(pUpdate->nAccountDBID, pUpdate->nSessionID);
|
|
#endif
|
|
if (nRet != ERROR_NONE){
|
|
g_Log.Log( LogType::_ERROR, pUpdate->cWorldSetID, pUpdate->nAccountDBID, 0, pUpdate->nSessionID, L"[ADBID:%u] [QUERY_LOGOUT:%d] (Ret:%d)\r\n", pUpdate->nAccountDBID, pUpdate->cWorldSetID, nRet);
|
|
|
|
m_pConnection->QueryResultError(pUpdate->nAccountDBID, nRet, nMainCmd, nSubCmd); // 디비에서 뭔가 에러값을 뱉어냈으니 걍 끊어버린다
|
|
}
|
|
}
|
|
else
|
|
g_Log.Log(LogType::_ERROR, pUpdate->cWorldSetID, pUpdate->nAccountDBID, 0, pUpdate->nSessionID, L"[ADBID:%u] [QUERY_LOGOUT:%d] pMembershipDB not found\r\n", pUpdate->nAccountDBID, pUpdate->cWorldSetID);
|
|
}
|
|
break;
|
|
|
|
case QUERY_LOGINCHARACTER:
|
|
{
|
|
TQLoginCharacter* pEtc = reinterpret_cast<TQLoginCharacter*>(pData);
|
|
|
|
pWorldDB = g_SQLConnectionManager.FindWorldDB( nThreadID, pEtc->cWorldSetID );
|
|
if (pWorldDB)
|
|
{
|
|
pWorldDB->QueryLoginCharacter( pEtc );
|
|
}
|
|
else
|
|
{
|
|
g_Log.Log (LogType::_ERROR, pEtc->cWorldSetID, pEtc->nAccountDBID, pEtc->biCharacterDBID, pEtc->uiSessionID, L"[QUERY_LOGINCHARACTER:%d] pWorldDB Error\r\n", pEtc->cWorldSetID );
|
|
}
|
|
break;
|
|
}
|
|
case QUERY_LOGOUTCHARACTER:
|
|
{
|
|
TQLogoutCharacter* pEtc = reinterpret_cast<TQLogoutCharacter*>(pData);
|
|
|
|
pWorldDB = g_SQLConnectionManager.FindWorldDB( nThreadID, pEtc->cWorldSetID );
|
|
if (pWorldDB)
|
|
{
|
|
pWorldDB->QueryLogoutCharacter( pEtc );
|
|
}
|
|
else
|
|
{
|
|
if( pEtc->cWorldSetID > 0 )
|
|
g_Log.Log (LogType::_ERROR, pEtc->cWorldSetID, pEtc->nAccountDBID, pEtc->biCharacterDBID, pEtc->uiSessionID, L"[QUERY_LOGOUTCHARACTER:%d] pWorldDB Error\r\n", pEtc->cWorldSetID );
|
|
}
|
|
break;
|
|
}
|
|
|
|
case QUERY_UPDATECONNECTINGTIME:
|
|
{
|
|
TQSaveConnectDurationTime *pEtc = (TQSaveConnectDurationTime*)pData;
|
|
|
|
pWorldDB = g_SQLConnectionManager.FindWorldDB(nThreadID, pEtc->cWorldSetID);
|
|
if (pWorldDB)
|
|
pWorldDB->QuerySaveConnectDurationTime(pEtc);
|
|
else
|
|
g_Log.Log(LogType::_ERROR, pEtc->cWorldSetID, pEtc->nAccountDBID, pEtc->biCharacterDBID, 0, L"[QUERY_UPDATECONNECTINGTIME:%d] pWorldDB Error\r\n", pEtc->cWorldSetID);
|
|
|
|
}
|
|
break;
|
|
|
|
case QUERY_MODLASTCONNECTDATE:
|
|
{
|
|
TQHeader *pEtc = (TQHeader*)pData;
|
|
|
|
pMembershipDB = g_SQLConnectionManager.FindMembershipDB(nThreadID);
|
|
if (pMembershipDB){
|
|
nRet = pMembershipDB->QueryModLastConnectDate(pEtc->nAccountDBID);
|
|
if (nRet != ERROR_NONE){
|
|
g_Log.Log( LogType::_ERROR, 0, pEtc->nAccountDBID, 0, 0, L"[ADBID:%u] [QUERY_MODLASTCONNECTDATE:%d] (Ret:%d)\r\n", pEtc->nAccountDBID, pEtc->cWorldSetID, nRet);
|
|
m_pConnection->QueryResultError(pEtc->nAccountDBID, nRet, nMainCmd, nSubCmd); // 디비에서 뭔가 에러값을 뱉어냈으니 걍 끊어버린다
|
|
}
|
|
}
|
|
else
|
|
g_Log.Log(LogType::_ERROR, 0, pEtc->nAccountDBID, 0, 0, L"[ADBID:%u] [QUERY_MODLASTCONNECTDATE:%d] pMembershipDB not found\r\n", pEtc->nAccountDBID, pEtc->cWorldSetID);
|
|
}
|
|
break;
|
|
#if defined( PRE_FIX_67546 )
|
|
case QUERY_ADD_CHANNELCOUNT:
|
|
{
|
|
TQAddThreadCount *pEtc = (TQAddThreadCount*)pData;
|
|
if( g_pIocpManager )
|
|
{
|
|
TAAddThreadCount Etc;
|
|
memset(&Etc, 0, sizeof(Etc));
|
|
g_pIocpManager->AddConnectionCount( pEtc->cChoiceThreadID );
|
|
int nCount[THREADMAX];
|
|
g_pIocpManager->GetConnectionCount( nCount );
|
|
memcpy( Etc.nConnectionCount, nCount, sizeof(Etc.nConnectionCount) );
|
|
int nConnectionCount = g_pIocpManager->GetVillageGameConnectionCount();
|
|
for(int i=0;i<nConnectionCount;i++)
|
|
{
|
|
CDNConnection* pCon = g_pIocpManager->GetVillageGameConnection(i);
|
|
if( pCon && pCon->GetActive() )
|
|
{
|
|
pCon->AddSendData( nMainCmd, nSubCmd, reinterpret_cast<char*>(&Etc), sizeof(Etc) );
|
|
}
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
#endif
|
|
#if defined( PRE_ADD_GAMEQUIT_REWARD )
|
|
case QUERY_MOD_NEWBIE_REWARDFLAG:
|
|
{
|
|
TQModNewbieRewardFlag *pEtc = (TQModNewbieRewardFlag*)pData;
|
|
TAHeader Etc;
|
|
memset(&Etc, 0, sizeof(Etc));
|
|
|
|
Etc.nRetCode = ERROR_DB;
|
|
Etc.nAccountDBID = pEtc->nAccountDBID;
|
|
|
|
pMembershipDB = g_SQLConnectionManager.FindMembershipDB(nThreadID);
|
|
if(pMembershipDB)
|
|
{
|
|
Etc.nRetCode = pMembershipDB->QueryModNewbieRewardFlag(pEtc->nAccountDBID, pEtc->bRewardFlag);
|
|
}
|
|
else
|
|
g_Log.Log(LogType::_GAMEQUITREWARD, pEtc->cWorldSetID, pEtc->nAccountDBID, 0, 0, L"[ADBID:%u] [QUERY_MOD_NEWBIE_REWARDFLAG:%d] pMembershipDB not found\r\n", pEtc->nAccountDBID, pEtc->bRewardFlag);
|
|
|
|
m_pConnection->AddSendData(nMainCmd, nSubCmd, reinterpret_cast<char*>(&Etc), sizeof(Etc));
|
|
}
|
|
break;
|
|
#endif // #if defined( PRE_ADD_GAMEQUIT_REWARD )
|
|
#if defined(PRE_ADD_CP_RANK)
|
|
case QUERY_ADD_STAGE_CLEAR_BEST :
|
|
{
|
|
TQAddStageClearBest* pEtc = (TQAddStageClearBest*)pData;
|
|
pWorldDB = g_SQLConnectionManager.FindWorldDB(nThreadID, pEtc->cWorldSetID);
|
|
if (pWorldDB)
|
|
nRet = pWorldDB->QueryAddStageClearBest(pEtc);
|
|
else
|
|
g_Log.Log(LogType::_ERROR, pEtc->cWorldSetID, pEtc->nAccountDBID, pEtc->biCharacterDBID, 0, L"[QUERY_ADD_STAGE_CLEAR_BEST:%d] pWorldDB Error\r\n", pEtc->cWorldSetID);
|
|
|
|
if( nRet != ERROR_NONE)
|
|
g_Log.Log(LogType::_ERROR, pEtc->cWorldSetID, pEtc->nAccountDBID, 0, 0, L"[QUERY_ADD_STAGE_CLEAR_BEST] Error[Code:%d]\r\n", nRet);
|
|
}
|
|
break;
|
|
case QUERY_GET_STAGE_CLEAR_BEST :
|
|
{
|
|
TQGetStageClearBest *pEtc = (TQGetStageClearBest*)pData;
|
|
TAGetStageClearBest Etc;
|
|
memset(&Etc, 0, sizeof(Etc));
|
|
|
|
Etc.nRetCode = ERROR_DB;
|
|
Etc.nAccountDBID = pEtc->nAccountDBID;
|
|
|
|
pWorldDB = g_SQLConnectionManager.FindWorldDB(nThreadID, pEtc->cWorldSetID);
|
|
if(pWorldDB)
|
|
{
|
|
Etc.nRetCode = pWorldDB->QueryGetStageClearBest(pEtc, &Etc);
|
|
}
|
|
else
|
|
g_Log.Log(LogType::_ERROR, pEtc->cWorldSetID, pEtc->nAccountDBID, 0, 0, L"[ADBID:%u] [QUERY_GET_STAGE_CLEAR_BEST] pWorldDB not found\r\n", pEtc->nAccountDBID);
|
|
|
|
m_pConnection->AddSendData(nMainCmd, nSubCmd, reinterpret_cast<char*>(&Etc), sizeof(Etc));
|
|
}
|
|
break;
|
|
|
|
case QUERY_GET_STAGE_PERSONAL_BEST :
|
|
{
|
|
TQGetStageClearPersonalBest *pEtc = (TQGetStageClearPersonalBest*)pData;
|
|
TAGetStageClearPersonalBest Etc;
|
|
memset(&Etc, 0, sizeof(Etc));
|
|
|
|
Etc.nRetCode = ERROR_DB;
|
|
Etc.nAccountDBID = pEtc->nAccountDBID;
|
|
|
|
pWorldDB = g_SQLConnectionManager.FindWorldDB(nThreadID, pEtc->cWorldSetID);
|
|
if(pWorldDB)
|
|
{
|
|
Etc.nRetCode = pWorldDB->QueryGetStageClearPersonalBest(pEtc, &Etc);
|
|
}
|
|
else
|
|
g_Log.Log(LogType::_ERROR, pEtc->cWorldSetID, pEtc->nAccountDBID, 0, 0, L"[ADBID:%u] [QUERY_GET_STAGE_PERSONAL_BEST] pWorldDB not found\r\n", pEtc->nAccountDBID);
|
|
|
|
m_pConnection->AddSendData(nMainCmd, nSubCmd, reinterpret_cast<char*>(&Etc), sizeof(Etc));
|
|
}
|
|
break;
|
|
|
|
case QUERY_INIT_STAGE_BEST :
|
|
{
|
|
TQInitStageCP *pEtc = (TQInitStageCP*)pData;
|
|
pWorldDB = g_SQLConnectionManager.FindWorldDB(nThreadID, pEtc->cWorldSetID);
|
|
if(pWorldDB)
|
|
{
|
|
pWorldDB->QueryInitStageClearBest(pEtc->cInitType);
|
|
}
|
|
else
|
|
g_Log.Log(LogType::_ERROR, pEtc->cWorldSetID, pEtc->nAccountDBID, 0, 0, L"[ADBID:%u] [QUERY_INIT_STAGE_BEST] pWorldDB not found\r\n", pEtc->nAccountDBID);
|
|
}
|
|
break;
|
|
#endif //#if defined(PRE_ADD_CP_RANK)
|
|
|
|
case QUERY_MODCHARACTERSLOTCOUNT:
|
|
{
|
|
TQModCharacterSlotCount *pEtc = (TQModCharacterSlotCount*)pData;
|
|
|
|
pMembershipDB = g_SQLConnectionManager.FindMembershipDB(nThreadID);
|
|
if (pMembershipDB)
|
|
{
|
|
char cMaxCount = 0;
|
|
nRet = pMembershipDB->QueryModCharacterSlotCount(pEtc->biCharacterDBID, 1, cMaxCount); // 34: 캐릭터 슬롯 개수제한
|
|
}
|
|
else
|
|
g_Log.Log(LogType::_ERROR, pEtc->cWorldSetID, 0, 0, 0, L"[QUERY_MODCHARACTERSLOTCOUNT:%d] pMembershipDB Error\r\n", pEtc->cWorldSetID);
|
|
}
|
|
break;
|
|
}
|
|
} |