Files
2022-10-26 12:25:11 +08:00

99 lines
2.6 KiB
C++

#pragma once
#include <extreme/IO/EventQueue.h>
#include <extreme/dbc/RecordSet.h>
#include "QueryStruct.h"
enum eQUERYTYPE
{
QUERYTYPE_LOGINUSER,
QUERYTYPE_USERSTS,
QUERYTYPE_RECOVERSTS,
QUERYTYPE_AUTHLOG,
QUERYTYPE_CONTROLIP,
QUERYTYPE_GAMEVERSION,
QUERYTYPE_INCRESEAUTHFAILCOUNT,
QUERYTYPE_AUTHLOG_UPDATE,
QUERYTYPE_NETCATFE_LOG, // Japan _NET_CAFE
QUERYTYPE_NETCATFE_LOGIN, // (WAVERIX) (090708) (CHANGES) x (BUG-FIX)
QUERYTYPE_NETCAFE_OTP_CHECK, // Japan _JP000000_ONETIMEPASSWORD_AUTHFLOW_
QUERYTYPE_USERID, //__NA000000_SHOP_USERID_50_PASSING_PROC__
QUERYTYPE_GSP_CHECK_AUTH, // GSP DB - Check AuthKey
QUERYTYPE_GSP_ACCOUNT_STATE, // GSP DB - Change Login User State
QUERYTYPE_GSP_CONNECT_LOG, // GSP DB - Logging User State
QUERYTYPE_GSP_ACCOUNT_ID, // GSP DB - Get Account ID by GameID
QUERYTYPE_GSP_ACCOUNT_ID_BY_GUID, // GSP DB - Get Account ID by AccountGuid
QUERYTYPE_TOKEN_UPDATE, // 중국 토큰 인증, 토큰 값을 업데이트 한다. __CN_20100909_SECURITY_TOKEN__
QUERYTYPE_PCROOM_IPLIST, //피시방 GUID 로 아이피 목록을 가지고 온다.
QUERYTYPE_CHECK_PASSWORD, // _CN_ZY_AUTH_PROCESS
QUERYTYPE_BLOCKUSER, //몽앴실츰룐뵀 by:枷쟁팃숲 2021-06-28
QUERYTYPE_UPDATEIPCOUNT, //崗역掘齡 by:枷쟁팃숲 2021-06-28
QUERYTYPE_END,
QUERYTYPE_MAX,
};
// eXtreme의 DB Lib는 최소단위가 2바이트가 되어야 한다. m_Record의 변수들은 BYTE를 쓰지 못함.
// 또한 adParamReturnValue으로 사용하는 파라미터도 4바이트 고정이다. 1BYTE를 사용하면 뒤에 변수들이 변경된다.
class QueryObject : public eXtreme::EventHandler
{
public:
QueryObject( eQUERYTYPE type ) : m_queryType( type ) {}
virtual ~QueryObject() {}
VOID Release() { m_recordSet.Release(); }
virtual VOID onResult()
{
DWORD DelayTime = ::GetTickCount() - m_StartTime;
if( DelayTime > 1000*10 )
{
SUNLOG( eCRITICAL_LOG, "[onResult] Query Delay[%u] QueryType[%u]", DelayTime, m_queryType );
}
}
virtual DB_TYPE GetDBType() = 0;
DWORD m_key;
eQUERYTYPE m_queryType;
eXtreme::RecordSet m_recordSet;
std::string m_query;
DWORD m_StartTime;
BOOL m_Success;
std::string m_spName;
private:
void HandleEvent( eXtreme::AsyncResult* result ) { __UNUSED(result); }
eXtreme::Socket* GetHandle() { return 0; }
char* GetBuffer() { return 0; }
int GetBufferSize() { return 0; }
};
// Query의 종료를 알리는 쿼리오브젝트
class QueryEnd : public QueryObject
{
public:
QueryEnd() : QueryObject( QUERYTYPE_END )
{
}
DB_TYPE GetDBType() { return DB_TYPE_MAX; }
};