133 lines
3.2 KiB
C++
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();
|
|
};
|