Files
2026-11-07 13:30:45 +07:00

133 lines
3.2 KiB
C++

#pragma once
#include "../network/Packet.h"
// 변수의 타입과 사이즈
enum VariableType
{
vChar = 100,
vWChar,
vTimeStamp,
vLONG,
vINT64,
vSHORT,
vWrong
};
struct ValueType
{
VariableType type; // 어떤 타입의 데이터인가
int size; // 사이즈는?
ValueType()
{
type = vWrong;
size = 0;
}
};
typedef vector<ValueType> vVALUETYPE;
class cSerialize;
// CQuery의 헤더
struct QueryHeader
{
QueryHeader()
{
nMsgType = -1;
nQueryType = -1;
fieldLength = 0;
resultLength = 0;
returnLength = -1;
nValueTypeCnt = -1;
nSetValue = -1;
nQueryBufferSize= -1;
nIndex = 0;
nResult_Type = 0;
queryId = 0;
databaseId = 0;
}
int nMsgType; // 메세지 타입, DB서버에서 사용하기보다 나중에 게임서버가 결과를 받아서 처리할때 필요
int nQueryType; // 쿼리의 타입 (insert = 0, delete = 1, select = 2, update = 3)
int fieldLength; // 쿼리 부분 사이즈
int resultLength; // 결과 부분 사이즈
int returnLength; // 다시 되돌려 받아야 하는 데이터의 사이즈
int nValueTypeCnt; // 결과값의 갯수
int nSetValue; // MoveNext : 한테이블에 몇개의 변수?
int nQueryBufferSize; // 버퍼의 사이즈 (실제 데이터)
unsigned int nIndex; // 쿼리 주인의 고유 인덱스.
int nResult_Type; // 결과 에러시 행동.
int queryId; // 실행하고자 하는 쿼리번호
int databaseId; // 디비구분
};
class CQuery
{
protected:
QueryHeader m_queryHeader; // 쿼리헤더
char *m_pBuffer; // 쿼리내용, 결과데이터타입들, 다시 돌려받아야할 데이터
public:
void Clear()
{
memset(&m_queryHeader,0,sizeof(QueryHeader));
if(m_pBuffer != NULL)
{
delete[] m_pBuffer;
m_pBuffer = NULL;
}
}
};
class CQueryData : public CQuery
{
public://GET
//HEADER
int GetMsgType() { return m_queryHeader.nMsgType; }
int GetQueryType() { return m_queryHeader.nQueryType; }
int GetFieldSize() { return m_queryHeader.fieldLength; }
int GetResultSize() { return m_queryHeader.resultLength; }
int GetValueCnt() { return m_queryHeader.nValueTypeCnt; }
int GetReturnSize() { return m_queryHeader.returnLength; }
int GetSetValue() { return m_queryHeader.nSetValue; }
int GetBufferSize() { return m_queryHeader.nQueryBufferSize; }
unsigned int GetIndex() { return m_queryHeader.nIndex; }
int GetResultType() { return m_queryHeader.nResult_Type; }
int GetQueryID() { return m_queryHeader.queryId; }
int GetDatabaseID() { return m_queryHeader.databaseId; }
//DATA
QueryHeader *GetHeader(){ return &m_queryHeader; }
char *GetBuffer() { return m_pBuffer; }
void GetFields(cSerialize& fieldTypes);
void GetResults(vVALUETYPE& valueTypes);
void GetReturns(char* buffer, int &size);
public:
//SET
void SetData(
unsigned int nIndex,
int nResult_Type,
int nMsgType,
int nQueryType,
int queryId,
cSerialize& fieldTypes,
vVALUETYPE& valueTypes,
int nSetValue = 1);
void SetBuffer(const char *buffer);
void SetBuffer(uint8 *buffer);
protected:
//돌려받기 위해 저장하는 데이터
char m_szReturnBuf[ MAX_BUFFER ];
int m_iReturnLength;
public:
void SetReturnData( const void *pData, int iSize );
void Copy( CQueryData &queryData );
public:
CQueryData();
virtual ~CQueryData();
};