Restructure repository to include all source folders
Move git root from Client/ to src/ to track all source code: - Client: Game client source (moved to Client/Client/) - Server: Game server source - GameTools: Development tools - CryptoSource: Encryption utilities - database: Database scripts - Script: Game scripts - rylCoder_16.02.2008_src: Legacy coder tools - GMFont, Game: Additional resources 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
79
Server/AdminTool/AdminToolLibrary/dbcomponent/AuthDB.cpp
Normal file
79
Server/AdminTool/AdminToolLibrary/dbcomponent/AuthDB.cpp
Normal file
@@ -0,0 +1,79 @@
|
||||
#include "stdafx.h"
|
||||
|
||||
#include "AuthDB.h"
|
||||
#include "../Parser/ServerInfo.h"
|
||||
#include <Log/ServerLog.h>
|
||||
#include <Network/Protocol/Ryl_AdminMgrProtocol.h>
|
||||
|
||||
|
||||
unsigned long CAuthDB::GetUIDFromAccount(char* szAccountName)
|
||||
{
|
||||
const char* szNation = CServerInfo::GetInstance().GetValue("NATION");
|
||||
if (NULL == szNation)
|
||||
{
|
||||
ERRLOG0(g_Log, "국가 타입을 얻는데 실패했습니다.");
|
||||
return 0;
|
||||
}
|
||||
|
||||
char szQuery[MAX_QUERY_LENGTH];
|
||||
if (0 == strcmp("KOREA", szNation))
|
||||
{
|
||||
_snprintf(szQuery, MAX_QUERY_LENGTH,
|
||||
"SELECT uid, strID FROM TblRylUserInfo WHERE strID = '%s'", szAccountName);
|
||||
}
|
||||
else
|
||||
{
|
||||
_snprintf(szQuery, MAX_QUERY_LENGTH,
|
||||
"EXEC dbo.sp_SearchUserAccount NULL, '%s'", szAccountName);
|
||||
}
|
||||
|
||||
unsigned long dwUID = 0;
|
||||
|
||||
const int nBufferSize = sizeof(int) + PktAdminMgr::MAX_ACCOUNT;
|
||||
char szBuffer[nBufferSize];
|
||||
ZeroMemory(szBuffer, nBufferSize);
|
||||
|
||||
if (false == ExecuteQueryGetData(szQuery, szBuffer))
|
||||
{
|
||||
ERRLOG2(g_Log, "UID를 얻는데 실패했습니다. Account: %s, Err: %s", szAccountName, GetErrorString());
|
||||
return 0;
|
||||
}
|
||||
|
||||
memcpy(&dwUID, szBuffer, sizeof(unsigned int));
|
||||
return dwUID;
|
||||
}
|
||||
|
||||
bool CAuthDB::GetAccountFromUID(unsigned long dwUID, void* lpGetData)
|
||||
{
|
||||
const char* szNation = CServerInfo::GetInstance().GetValue("NATION");
|
||||
if (NULL == szNation)
|
||||
{
|
||||
ERRLOG0(g_Log, "국가 타입을 얻는데 실패했습니다.");
|
||||
return 0;
|
||||
}
|
||||
|
||||
char szQuery[MAX_QUERY_LENGTH];
|
||||
if (0 == strcmp("KOREA", szNation))
|
||||
{
|
||||
_snprintf(szQuery, MAX_QUERY_LENGTH,
|
||||
"SELECT uid, strID FROM TblRylUserInfo WHERE uid = %u", dwUID);
|
||||
}
|
||||
else
|
||||
{
|
||||
_snprintf(szQuery, MAX_QUERY_LENGTH,
|
||||
"EXEC dbo.sp_SearchUserAccount %u, NULL", dwUID);
|
||||
}
|
||||
|
||||
const int nBufferSize = sizeof(int) + PktAdminMgr::MAX_ACCOUNT;
|
||||
char szBuffer[nBufferSize];
|
||||
ZeroMemory(szBuffer, nBufferSize);
|
||||
|
||||
if (true == ExecuteQueryGetData(szQuery, szBuffer))
|
||||
{
|
||||
memcpy(lpGetData, szBuffer + sizeof(int), PktAdminMgr::MAX_ACCOUNT);
|
||||
return true;
|
||||
}
|
||||
|
||||
ERRLOG2(g_Log, "Account를 얻는데 실패했습니다. UID: %u, Err: %s", dwUID, GetErrorString());
|
||||
return false;
|
||||
}
|
||||
20
Server/AdminTool/AdminToolLibrary/dbcomponent/AuthDB.h
Normal file
20
Server/AdminTool/AdminToolLibrary/dbcomponent/AuthDB.h
Normal file
@@ -0,0 +1,20 @@
|
||||
#ifndef _RYL_AUTHDB_H_
|
||||
#define _RYL_AUTHDB_H_
|
||||
|
||||
#include <BaseLibrary/DB/OLEDB.h>
|
||||
|
||||
/*!
|
||||
\class CAuthDB
|
||||
인증 DB : 해외 운영 서버일 경우만 사용
|
||||
*/
|
||||
class CAuthDB : public OleDB
|
||||
{
|
||||
private:
|
||||
enum SIZE { MAX_QUERY_LENGTH = 5000 };
|
||||
|
||||
public:
|
||||
unsigned long GetUIDFromAccount(char* szAccountName); // 계정명으로 UID 얻기
|
||||
bool GetAccountFromUID(unsigned long dwUID, void* lpGetData); // UID로 계정명 얻기
|
||||
};
|
||||
|
||||
#endif
|
||||
67
Server/AdminTool/AdminToolLibrary/dbcomponent/BillingDB.cpp
Normal file
67
Server/AdminTool/AdminToolLibrary/dbcomponent/BillingDB.cpp
Normal file
@@ -0,0 +1,67 @@
|
||||
#include "stdafx.h"
|
||||
|
||||
#include "BillingDB.h"
|
||||
#include <Log/ServerLog.h>
|
||||
|
||||
bool CBillingDB::CheckLogin(unsigned long dwServerGroup, unsigned long dwUID)
|
||||
{
|
||||
// edith 2009.08.14 관심유저 버그수정 (ROW_Activity DB사용)
|
||||
char szQuery[MAX_QUERY_LENGTH];
|
||||
_snprintf(szQuery, MAX_QUERY_LENGTH,
|
||||
"SELECT UID FROM TblCurrentUser WHERE UID = %d AND tinyServerID = %d",
|
||||
dwUID, dwServerGroup);
|
||||
|
||||
unsigned long dwGetUID = 0;
|
||||
|
||||
if (true == ExecuteQueryGetData(szQuery, &dwGetUID))
|
||||
{
|
||||
if(0 == dwGetUID)
|
||||
{
|
||||
// 접속 중이지 않음.
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
// 접속 중.
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
unsigned long CBillingDB::GetUIDFromAccount(char* szAccountName)
|
||||
{
|
||||
// edith 2009.08.14 관심유저 버그수정 (ROW_Activity DB사용)
|
||||
char szQuery[MAX_QUERY_LENGTH];
|
||||
_snprintf(szQuery, MAX_QUERY_LENGTH,
|
||||
"SELECT TOP 1 UID FROM TblCurrentUser WHERE strClientID = '%s'", szAccountName);
|
||||
// "SELECT TOP 1 UID FROM TblCurrentUser_log WHERE strClientID = '%s'", szAccountName);
|
||||
|
||||
unsigned long dwUID = 0;
|
||||
|
||||
if (false == ExecuteQueryGetData(szQuery, &dwUID))
|
||||
{
|
||||
ERRLOG2(g_Log, "UID를 얻는데 실패했습니다. Account: %s, Err: %s", szAccountName, GetErrorString());
|
||||
return 0;
|
||||
}
|
||||
|
||||
return dwUID;
|
||||
}
|
||||
|
||||
bool CBillingDB::GetAccountFromUID(unsigned long dwUID, void* lpGetData)
|
||||
{
|
||||
// edith 2009.08.14 관심유저 버그수정 (ROW_Activity DB사용)
|
||||
char szQuery[MAX_QUERY_LENGTH];
|
||||
_snprintf(szQuery, MAX_QUERY_LENGTH,
|
||||
"SELECT TOP 1 strClientID FROM TblCurrentUser WHERE UID = %u", dwUID);
|
||||
// "SELECT TOP 1 strClientID FROM TblCurrentUser_log WHERE UID = %u", dwUID);
|
||||
|
||||
if (false == ExecuteQueryGetData(szQuery, lpGetData))
|
||||
{
|
||||
ERRLOG2(g_Log, "Account를 얻는데 실패했습니다. UID: %u, Err: %s", dwUID, GetErrorString());
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
27
Server/AdminTool/AdminToolLibrary/dbcomponent/BillingDB.h
Normal file
27
Server/AdminTool/AdminToolLibrary/dbcomponent/BillingDB.h
Normal file
@@ -0,0 +1,27 @@
|
||||
#ifndef _RYL_BILLINGDB_H_
|
||||
#define _RYL_BILLINGDB_H_
|
||||
|
||||
#include <BaseLibrary/DB/OLEDB.h>
|
||||
#include "../Network/Protocol/RYL_AdminMgrProtocol.h"
|
||||
|
||||
|
||||
/*!
|
||||
\class CBillingDB
|
||||
과금 DB : 한국 운영서버일 경우만 사용
|
||||
*/
|
||||
class CBillingDB : public OleDB
|
||||
{
|
||||
private:
|
||||
enum SIZE { MAX_QUERY_LENGTH = 5000 };
|
||||
|
||||
public:
|
||||
// RYLBillingDB Only!
|
||||
bool CheckLogin(unsigned long dwServerGroup, unsigned long dwUID); // 해당 계정의 접속 여부 판별
|
||||
|
||||
// RYLBillingDB_log Only!
|
||||
unsigned long GetUIDFromAccount(char* szAccountName); // 계정명으로 UID 얻기
|
||||
bool GetAccountFromUID(unsigned long dwUID, void* lpGetData); // UID로 계정명 얻기
|
||||
|
||||
};
|
||||
|
||||
#endif
|
||||
291
Server/AdminTool/AdminToolLibrary/dbcomponent/RYL_GameDB.cpp
Normal file
291
Server/AdminTool/AdminToolLibrary/dbcomponent/RYL_GameDB.cpp
Normal file
@@ -0,0 +1,291 @@
|
||||
#include "stdafx.h"
|
||||
|
||||
#include "RYL_GameDB.h"
|
||||
#include <Log/ServerLog.h>
|
||||
#include <Network/Packet/PacketStruct/UnifiedCharPacket.h>
|
||||
|
||||
|
||||
// UID에 걸려있는 모든 캐릭터 정보를 가져온다.
|
||||
bool CGameDB::UIDByCharacterList(unsigned long UID, unsigned int nAgentType,
|
||||
unsigned int nOldServerID, void* GetData)
|
||||
{
|
||||
char* first = reinterpret_cast<char*>(GetData);
|
||||
unsigned char* lpCount = reinterpret_cast<unsigned char*>(first);
|
||||
char* In_CharPos = static_cast<char*>(first + 1);
|
||||
|
||||
CGameDB::In_UserInfo TblUserInfo;
|
||||
CGameDB::Out_CharList* lpOut_CharList;
|
||||
|
||||
*lpCount = 0;
|
||||
ZeroMemory(&TblUserInfo, sizeof(CGameDB::In_UserInfo));
|
||||
|
||||
if (UnifiedConst::Part2Selectable == nAgentType)
|
||||
{
|
||||
_snprintf(m_szQuery, MAX_QUERY_LENGTH,
|
||||
"SELECT Char1, Char2, Char3, Char4, Char5 FROM UserInfo "
|
||||
"WHERE UID = %d AND OldServerGroupID = %d", UID, nOldServerID);
|
||||
}
|
||||
else
|
||||
{
|
||||
_snprintf(m_szQuery, MAX_QUERY_LENGTH,
|
||||
"SELECT Char1, Char2, Char3, Char4, Char5 FROM UserInfo "
|
||||
"WHERE UID = %d AND OldServerGroupID IN (%d, %d)",
|
||||
UID, UnifiedConst::ROW, UnifiedConst::Part2Unified);
|
||||
}
|
||||
|
||||
if (true == ExecuteQuery(m_szQuery))
|
||||
{
|
||||
if(this->GetData(&TblUserInfo))
|
||||
{
|
||||
char* CharCID = reinterpret_cast<char*>(&TblUserInfo);
|
||||
for(int cnt = 0; cnt < SIZE::MAX_CHAR_SLOT; cnt++)
|
||||
{
|
||||
unsigned long* CID = reinterpret_cast<unsigned long*>(CharCID + (sizeof(unsigned long) * cnt));
|
||||
|
||||
lpOut_CharList = reinterpret_cast<CGameDB::Out_CharList*>(
|
||||
In_CharPos + ((*lpCount) * sizeof(CGameDB::Out_CharList)));
|
||||
|
||||
if(*CID)
|
||||
{
|
||||
lpOut_CharList->m_UID = UID;
|
||||
lpOut_CharList->m_CID = *CID;
|
||||
CIDByCharacterName(*CID, lpOut_CharList->m_szCharName);
|
||||
*lpCount += 1;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool CGameDB::UIDbyUserInfo(unsigned long dwUID, unsigned int nAgentType,
|
||||
unsigned int nOldServerID, void* GetData)
|
||||
{
|
||||
if (UnifiedConst::Part2Selectable == nAgentType)
|
||||
{
|
||||
_snprintf(m_szQuery, MAX_QUERY_LENGTH,
|
||||
"SELECT Char1, Char2, Char3, Char4, Char5 FROM UserInfo "
|
||||
"WHERE UID = %d AND OldServerGroupID = %d", dwUID, nOldServerID);
|
||||
}
|
||||
else
|
||||
{
|
||||
_snprintf(m_szQuery, MAX_QUERY_LENGTH,
|
||||
"SELECT Char1, Char2, Char3, Char4, Char5 FROM UserInfo "
|
||||
"WHERE UID = %d AND OldServerGroupID IN (%d, %d)",
|
||||
dwUID, UnifiedConst::ROW, UnifiedConst::Part2Unified);
|
||||
}
|
||||
|
||||
if (true == ExecuteQuery(m_szQuery))
|
||||
{
|
||||
if(this->GetData(GetData))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool CGameDB::GetUserNation(unsigned int nAgentType, unsigned long dwUID,
|
||||
unsigned long dwCID, void* GetData)
|
||||
{
|
||||
// CID대신 OldServerGroupID를 받으면 깔끔하지만
|
||||
// 그렇게 하려면 클라이언트쪽에 애로사항이 꽃핀다.
|
||||
|
||||
if (UnifiedConst::Part2Selectable == nAgentType)
|
||||
{
|
||||
_snprintf(m_szQuery, MAX_QUERY_LENGTH,
|
||||
"SELECT Nation FROM UserInfo "
|
||||
"WHERE UID = %d AND (Char1 = %u OR Char2 = %u OR Char3 = %u OR Char4 = %u OR Char5 = %u)",
|
||||
dwUID, dwCID, dwCID, dwCID, dwCID, dwCID);
|
||||
}
|
||||
else
|
||||
{
|
||||
_snprintf(m_szQuery, MAX_QUERY_LENGTH,
|
||||
"SELECT Nation FROM UserInfo "
|
||||
"WHERE UID = %d AND OldServerGroupID IN (%d, %d)",
|
||||
dwUID, UnifiedConst::ROW, UnifiedConst::Part2Unified);
|
||||
}
|
||||
|
||||
if (true == ExecuteQuery(m_szQuery))
|
||||
{
|
||||
if (this->GetData(GetData))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
ERRLOG1(g_Log, "계정 국가 얻기 실패- %s", GetErrorString());
|
||||
return false;
|
||||
}
|
||||
|
||||
// 캐릭터 이름으로 검색
|
||||
bool CGameDB::CNameByCharacterList(char* szCharacterName, void* GetData)
|
||||
{
|
||||
char* first = reinterpret_cast<char*>(GetData);
|
||||
unsigned char* lpCount = reinterpret_cast<unsigned char*>(first);
|
||||
|
||||
char* In_CharPos = static_cast<char*>(first + 1);
|
||||
|
||||
CGameDB::Out_CharList* lpOut_CharList = reinterpret_cast<CGameDB::Out_CharList*>(In_CharPos);
|
||||
|
||||
unsigned long dwCID;
|
||||
|
||||
_snprintf(m_szQuery, MAX_QUERY_LENGTH,
|
||||
"SELECT NewCID FROM TblUnifiedCharList "
|
||||
"WHERE NewCID IN (SELECT CID FROM CharInfo WHERE Name = '%s') "
|
||||
"AND (OldServerGroupID <= 15 OR OldServerGroupID IN (%d, %d, %d))",
|
||||
szCharacterName, UnifiedConst::ROW, UnifiedConst::Part2Unified, UnifiedConst::Part2Selectable);
|
||||
|
||||
if (true == ExecuteQuery(m_szQuery))
|
||||
{
|
||||
if (this->GetData(&dwCID))
|
||||
{
|
||||
*lpCount = 1;
|
||||
lpOut_CharList = reinterpret_cast<CGameDB::Out_CharList*>(In_CharPos);
|
||||
lpOut_CharList->m_CID = dwCID;
|
||||
|
||||
if(!CIDByCharacterName(dwCID, lpOut_CharList->m_szCharName))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if(!CIDByUID(dwCID, &lpOut_CharList->m_UID))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CGameDB::CharacterNameByCID(char* szCharacterName, void* GetData)
|
||||
{
|
||||
_snprintf(m_szQuery, MAX_QUERY_LENGTH,
|
||||
"SELECT CID FROM CharInfo WHERE Name = '%s'", szCharacterName);
|
||||
|
||||
if(!ExecuteQueryGetData(m_szQuery, GetData))
|
||||
{
|
||||
ERRLOG2(g_Log, "쿼리 실패. 쿼리-%s, 에러-%s", m_szQuery, GetErrorString());
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
// CID로 캐릭터 검색
|
||||
bool CGameDB::CIDByCharacterList(unsigned long CID, void* GetData)
|
||||
{
|
||||
char* first = reinterpret_cast<char*>(GetData);
|
||||
unsigned char* lpCount = reinterpret_cast<unsigned char*>(first);
|
||||
char* In_CharPos = static_cast<char*>(first + 1);
|
||||
|
||||
CGameDB::Out_CharList* lpOut_CharList = reinterpret_cast<CGameDB::Out_CharList*>(In_CharPos);
|
||||
|
||||
*lpCount = 1;
|
||||
lpOut_CharList->m_CID = CID;
|
||||
|
||||
if (false == CIDByCharacterName(CID, lpOut_CharList->m_szCharName))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (false == CIDByUID(CID, &lpOut_CharList->m_UID))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
// CID로 UID검색
|
||||
bool CGameDB::CIDByUID(unsigned long CID, void* GetData)
|
||||
{
|
||||
_snprintf(m_szQuery, MAX_QUERY_LENGTH,
|
||||
"SELECT UID FROM UserInfo WHERE Char1 = %d OR Char2 = %d OR Char3 = %d OR Char4 = %d OR Char5 = %d",
|
||||
CID, CID, CID, CID, CID);
|
||||
|
||||
if (true == ExecuteQuery(m_szQuery))
|
||||
{
|
||||
if (this->GetData(GetData))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
GetData = NULL;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
// CID로 캐릭터 이름 검색
|
||||
bool CGameDB::CIDByCharacterName(unsigned long CID, void* GetData)
|
||||
{
|
||||
_snprintf(m_szQuery, MAX_QUERY_LENGTH, "SELECT Name FROM CharInfo WHERE CID = %d", CID);
|
||||
|
||||
if (true == ExecuteQuery(m_szQuery))
|
||||
{
|
||||
if(this->GetData(GetData))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
GetData = NULL;
|
||||
return false;
|
||||
}
|
||||
|
||||
bool CGameDB::ChangeName(unsigned long dwCID, char* szName)
|
||||
{
|
||||
// 중계서버에 캐릭명 변경을 직접 요청하는 방식으로 변경되었음.
|
||||
/*
|
||||
_snprintf(m_szQuery, MAX_QUERY_LENGTH,
|
||||
"UPDATE CharInfo SET Name = '%s' WHERE CID = %d", szName, dwCID);
|
||||
|
||||
if(!ExecuteQuery(m_szQuery))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
*/
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CGameDB::UseCharacterName(char* szName)
|
||||
{
|
||||
char result[20];
|
||||
|
||||
_snprintf(m_szQuery, MAX_QUERY_LENGTH,
|
||||
"SELECT Name FROM CharInfo WHERE Name = '%s'", szName);
|
||||
|
||||
if(ExecuteQuery(m_szQuery))
|
||||
{
|
||||
if(GetData(result))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
unsigned char CGameDB::GetOldServerGroupID(unsigned long dwCID)
|
||||
{
|
||||
unsigned char cOldServerGroupID = 0;
|
||||
|
||||
_snprintf(m_szQuery, MAX_QUERY_LENGTH,
|
||||
"SELECT OldServerGroupID FROM UserInfo"
|
||||
" WHERE Char1 = %u OR Char2 = %u OR Char3 = %u OR Char4 = %u OR Char5 = %u",
|
||||
dwCID, dwCID, dwCID, dwCID, dwCID);
|
||||
|
||||
if (true == ExecuteQueryGetData(m_szQuery, &cOldServerGroupID))
|
||||
{
|
||||
return cOldServerGroupID;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
55
Server/AdminTool/AdminToolLibrary/dbcomponent/RYL_GameDB.h
Normal file
55
Server/AdminTool/AdminToolLibrary/dbcomponent/RYL_GameDB.h
Normal file
@@ -0,0 +1,55 @@
|
||||
#ifndef _RYL_GAMEDB_H_
|
||||
#define _RYL_GAMEDB_H_
|
||||
|
||||
#include <DB/DBComponent.h>
|
||||
|
||||
/*!
|
||||
\class CGameDB
|
||||
게임 데이터 베이스
|
||||
*/
|
||||
class CGameDB : public CDBComponent
|
||||
{
|
||||
public:
|
||||
#pragma pack(1)
|
||||
enum SIZE
|
||||
{
|
||||
MAX_CHAR_SLOT = 5
|
||||
};
|
||||
|
||||
struct In_UserInfo
|
||||
{
|
||||
unsigned long Char1;
|
||||
unsigned long Char2;
|
||||
unsigned long Char3;
|
||||
unsigned long Char4;
|
||||
unsigned long Char5;
|
||||
};
|
||||
|
||||
struct Out_CharList
|
||||
{
|
||||
char m_szCharName[16];
|
||||
unsigned long m_UID;
|
||||
unsigned long m_CID;
|
||||
};
|
||||
#pragma pack()
|
||||
|
||||
public:
|
||||
bool CIDByCharacterList(unsigned long CID, void* GetData); // 단일 캐릭터만 나옴
|
||||
bool CNameByCharacterList(char* szCharacterName, void* GetData); // 단일 캐릭터만 나옴
|
||||
bool CIDByUID(unsigned long CID, void* GetData); // CID로 UID 얻기
|
||||
bool CharacterNameByCID(char* szCharacterName, void* GetData); // 캐릭터 이름으로 CID 얻기
|
||||
bool CIDByCharacterName(unsigned long CID, void* GetData); // CID로 캐릭터 이름 얻기
|
||||
bool UseCharacterName(char* szName); // 해당 캐릭명이 사용중인지 판별
|
||||
bool ChangeName(unsigned long dwCID, char* szName); // 캐릭터 이름 변경
|
||||
|
||||
// Part2Selectable 타입의 영향을 받는 루틴
|
||||
bool UIDByCharacterList(unsigned long UID, unsigned int nAgentType, unsigned int nOldServerID, void* GetData); // 복수의 캐릭터가 있을수 있음
|
||||
bool UIDbyUserInfo(unsigned long dwUID, unsigned int nAgentType, unsigned int nOldServerID, void* GetData); // UID로 캐릭터 리스트 가져오기
|
||||
bool GetUserNation(unsigned int nAgentType, unsigned long dwUID, unsigned long dwCID, void* GetData); // 계정 국가 얻기
|
||||
unsigned char GetOldServerGroupID(unsigned long dwCID); // 해당 CID가 연결되있는 UserInfo의 OldServerGroupID 얻기
|
||||
|
||||
private:
|
||||
char m_szQuery[MAX_QUERY_LENGTH];
|
||||
};
|
||||
|
||||
#endif
|
||||
522
Server/AdminTool/AdminToolLibrary/dbcomponent/Ryl_AdminMgrDB.cpp
Normal file
522
Server/AdminTool/AdminToolLibrary/dbcomponent/Ryl_AdminMgrDB.cpp
Normal file
@@ -0,0 +1,522 @@
|
||||
#include "stdafx.h"
|
||||
|
||||
|
||||
#include <Log/ServerLog.h>
|
||||
#include <Parser/ServerInfo.h>
|
||||
#include <DBComponent/Ryl_AdminMgrDB.h>
|
||||
#include <Network/Protocol/Ryl_AdminMgrProtocol.h>
|
||||
|
||||
|
||||
CDBAdminTool& CDBAdminTool::GetInstance()
|
||||
{
|
||||
static CDBAdminTool dbAdminTool;
|
||||
return dbAdminTool;
|
||||
}
|
||||
|
||||
bool CDBAdminTool::ConnectAdminToolDB()
|
||||
{
|
||||
const int MAX_BUFFER = 255;
|
||||
|
||||
CServerInfo& ServerInfoTXT = CServerInfo::GetInstance();
|
||||
|
||||
if(!ServerInfoTXT.Reload())
|
||||
{
|
||||
ERRLOG0(g_Log, "서버 셋업 파일 로드 실패");
|
||||
return false;
|
||||
}
|
||||
|
||||
const char* DBAddress = ServerInfoTXT.GetValue("ADMINTOOL_DB_IP");
|
||||
const char* DBName = ServerInfoTXT.GetValue("ADMINTOOL_DB_NAME");
|
||||
const char* DBAccount = ServerInfoTXT.GetValue("ADMINTOOL_DB_ACCOUNT");
|
||||
const char* DBPass = ServerInfoTXT.GetValue("ADMINTOOL_DB_PASS");
|
||||
|
||||
char szDBAddress[MAX_BUFFER];
|
||||
char szDBName[MAX_BUFFER];
|
||||
char szDBAccount[MAX_BUFFER];
|
||||
char szDBPass[MAX_BUFFER];
|
||||
|
||||
strncpy(szDBAddress, DBAddress, MAX_BUFFER); szDBAddress[MAX_BUFFER - 1] = 0;
|
||||
strncpy(szDBName, DBName, MAX_BUFFER); szDBName[MAX_BUFFER - 1] = 0;
|
||||
strncpy(szDBAccount, DBAccount, MAX_BUFFER); szDBAccount[MAX_BUFFER - 1] = 0;
|
||||
strncpy(szDBPass, DBPass, MAX_BUFFER); szDBPass[MAX_BUFFER - 1] = 0;
|
||||
|
||||
if(!ConnectSQLServer(szDBAddress, szDBName, szDBAccount, szDBPass, OleDB::ConnType_MSSQL))
|
||||
{
|
||||
ERRLOG4(g_Log, "운영DB 연결 실패. %s/%s/%s/%s",
|
||||
szDBAddress, szDBName, szDBAccount, szDBPass);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CDBAdminTool::UpdateZoneList(unsigned int UID, char* In_Data)
|
||||
{
|
||||
_snprintf(m_szQry, MAX_QUERY_LENGTH, "SELECT binZone FROM TblToolAdmin WHERE uid=%d", UID);
|
||||
|
||||
if(ExecuteQuery(m_szQry, OleDB::Rowset_Update))
|
||||
{
|
||||
if(!SetBinaryData(1, (OleDB::LPSET_BINARY)In_Data))
|
||||
{
|
||||
ERRLOG0(g_Log, "바이너리 데이터 셋팅 실패");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CDBAdminTool::GetZoneList(unsigned int UID, char* Out_Data)
|
||||
{
|
||||
_snprintf(m_szQry, MAX_QUERY_LENGTH, "SELECT binZone FROM TblToolAdmin WHERE uid=%d", UID);
|
||||
|
||||
if(!ExecuteQueryGetData(m_szQry, Out_Data))
|
||||
{
|
||||
ERRLOG2(g_Log, "쿼리 실패. 쿼리-%s, 에러-%s", m_szQry, GetErrorString());
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
// 관리자 계정 로그인
|
||||
BYTE CDBAdminTool::Login(char* szAccount, char* szPassword)
|
||||
{
|
||||
char szGetedPassword[PktAdminMgr::MAX_PASSWORD];
|
||||
|
||||
_snprintf(m_szQry, MAX_QUERY_LENGTH,
|
||||
"SELECT strPasswd FROM TblToolAdmin WHERE strAdminID='%s'", szAccount);
|
||||
|
||||
ZeroMemory(szGetedPassword, PktAdminMgr::MAX_PASSWORD);
|
||||
|
||||
if(!ExecuteQueryGetData(m_szQry, (void*)szGetedPassword))
|
||||
{
|
||||
// 계정이 존재 하지 않음
|
||||
return PktAdminMgr::PktResult::Err_Account;
|
||||
}
|
||||
|
||||
if(NULL != szGetedPassword)
|
||||
{
|
||||
if(!stricmp(szGetedPassword, szPassword))
|
||||
{
|
||||
// 로그인 성공
|
||||
return PktAdminMgr::PktResult::Success_Login;
|
||||
}
|
||||
else
|
||||
{
|
||||
// 패스워드 다름
|
||||
return PktAdminMgr::PktResult::Err_Passwd;
|
||||
}
|
||||
}
|
||||
|
||||
return PktAdminMgr::PktResult::Err_Unknown;
|
||||
}
|
||||
|
||||
// 해당 관리자 계정 접속 아이피 체크
|
||||
BYTE CDBAdminTool::CheckIP(char* AdminID, char* szIP)
|
||||
{
|
||||
char strIP[16];
|
||||
|
||||
_snprintf(m_szQry, MAX_QUERY_LENGTH,
|
||||
"SELECT strIP FROM TblToolAdmin WHERE strAdminID='%s'", AdminID);
|
||||
|
||||
ZeroMemory(strIP, sizeof(strIP));
|
||||
|
||||
if(!ExecuteQueryGetData(m_szQry, (void*)strIP))
|
||||
{
|
||||
// 해당 ID 에대한 값을 찾을수 없거나 데이터 베이스 에러
|
||||
return PktAdminMgr::PktResult::Err_Database;
|
||||
}
|
||||
|
||||
if(NULL != strIP)
|
||||
{
|
||||
if(!stricmp(szIP, strIP))
|
||||
{
|
||||
// 성공
|
||||
return PktAdminMgr::PktResult::Success_ConnectIP;
|
||||
}
|
||||
else
|
||||
{
|
||||
// 등록되어 있는 아이피가 아님
|
||||
return PktAdminMgr::PktResult::Err_ConnectIP;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
return PktAdminMgr::PktResult::Err_Database;
|
||||
}
|
||||
|
||||
return PktAdminMgr::PktResult::Err_Unknown;
|
||||
}
|
||||
|
||||
// 선택아이디가 있냐? 없냐?
|
||||
bool CDBAdminTool::AccountCheck(char* AdminID)
|
||||
{
|
||||
char strAdminID[20];
|
||||
|
||||
_snprintf(m_szQry, MAX_QUERY_LENGTH,
|
||||
"SELECT strAdminID FROM TblToolAdmin WHERE strAdminID='%s'", AdminID);
|
||||
|
||||
ZeroMemory(strAdminID, sizeof(strAdminID));
|
||||
|
||||
if(!ExecuteQueryGetData(m_szQry, (void*)strAdminID))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
// 로그를 시작..
|
||||
bool CDBAdminTool::StartupLog(unsigned int UID, char* UseIP)
|
||||
{
|
||||
char szDate[30];
|
||||
if(!UID) return false;
|
||||
|
||||
if(GetDate(szDate))
|
||||
{
|
||||
_snprintf(m_szQry, MAX_QUERY_LENGTH,
|
||||
"INSERT INTO TblLog(UID, Login, UseIP) VALUES(%d, '%s', '%s')", UID, szDate, UseIP);
|
||||
|
||||
if(!ExecuteQuery(m_szQry))
|
||||
{
|
||||
ERRLOG2(g_Log, "쿼리 실패. 쿼리- %s, Err- %s",
|
||||
m_szQry, GetErrorString());
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
// 로그를 마친다
|
||||
bool CDBAdminTool::EndLog(unsigned int UID)
|
||||
{
|
||||
char szDate[30];
|
||||
int LogID;
|
||||
|
||||
if(!UID) return false;
|
||||
|
||||
if(GetDate(szDate))
|
||||
{
|
||||
if((LogID = GetNowLogID(UID)) > 0)
|
||||
{
|
||||
return UpdateLogoutDate(LogID, szDate);
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
// 관리자의 UID를 가져온다.
|
||||
int CDBAdminTool::GetMyUID(char* szAccount)
|
||||
{
|
||||
int UID;
|
||||
_snprintf(m_szQry, MAX_QUERY_LENGTH,
|
||||
"SELECT UID FROM TblToolAdmin WHERE strAdminID='%s'", szAccount);
|
||||
|
||||
if(ExecuteQuery(m_szQry))
|
||||
{
|
||||
if(GetData(&UID))
|
||||
{
|
||||
return UID;
|
||||
}
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
// 관리자 계정삭제.
|
||||
bool CDBAdminTool::DelAdmin( char* AdminID )
|
||||
{
|
||||
_snprintf(m_szQry, MAX_QUERY_LENGTH, "DELETE TblToolAdmin WHERE strAdminID='%s'", AdminID);
|
||||
|
||||
if(!ExecuteQuery(m_szQry))
|
||||
{
|
||||
ERRLOG2(g_Log, "쿼리 실패. 쿼리- %s, Err- %s",
|
||||
m_szQry, GetErrorString());
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
// 로그를 마친다.
|
||||
bool CDBAdminTool::UpdateExitLog( unsigned int LogID, char* szExitLog )
|
||||
{
|
||||
_snprintf(m_szQry, MAX_QUERY_LENGTH,
|
||||
"UPDATE TblLog SET UseMsg='%s' WHERE LogID=%d", szExitLog, LogID);
|
||||
|
||||
if(!ExecuteQuery(m_szQry))
|
||||
{
|
||||
ERRLOG2(g_Log, "쿼리 실패. 쿼리- %s, Err- %s",
|
||||
m_szQry, GetErrorString());
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
// 관리자 레벨변경
|
||||
bool CDBAdminTool::UpdateLevel(PktAdminMgr::PktUpdateLevel* UpdateLev)
|
||||
{
|
||||
_snprintf(m_szQry, MAX_QUERY_LENGTH,
|
||||
"UPDATE TblToolAdmin SET strLevel='%c' WHERE strAdminID='%s'",
|
||||
UpdateLev->m_szLevel, UpdateLev->m_szAccount);
|
||||
|
||||
if(!ExecuteQuery(m_szQry))
|
||||
{
|
||||
ERRLOG2(g_Log, "쿼리 실패. 쿼리- %s, Err- %s",
|
||||
m_szQry, GetErrorString());
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
// 관리자 접속 아이피 변경
|
||||
bool CDBAdminTool::UpdateIP(PktAdminMgr::PktUpdateIP* UpdateIP)
|
||||
{
|
||||
_snprintf(m_szQry, MAX_QUERY_LENGTH,
|
||||
"UPDATE TblToolAdmin SET strIP = '%s' WHERE strAdminID = '%s'",
|
||||
UpdateIP->m_szIP, UpdateIP->m_szAccount);
|
||||
|
||||
if(!ExecuteQuery(m_szQry))
|
||||
{
|
||||
ERRLOG2(g_Log, "쿼리 실패. 쿼리- %s, Err- %s",
|
||||
m_szQry, GetErrorString());
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
// 관리자 로그아웃날자 변경
|
||||
bool CDBAdminTool::UpdateLogoutDate(int LogID, char* szDate)
|
||||
{
|
||||
_snprintf(m_szQry, MAX_QUERY_LENGTH,
|
||||
"UPDATE TblLog SET Logout='%s' WHERE LogID=%d", szDate, LogID);
|
||||
|
||||
if(!ExecuteQuery(m_szQry))
|
||||
{
|
||||
ERRLOG2(g_Log, "쿼리 실패. 쿼리- %s, Err- %s",
|
||||
m_szQry, GetErrorString());
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
// 데이터 베이스에서 날자를 가져온다
|
||||
bool CDBAdminTool::GetDate(char* DateTime)
|
||||
{
|
||||
if(ExecuteQuery("SELECT CONVERT(varchar(30), getdate(), 120)"))
|
||||
{
|
||||
if(GetData(DateTime))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
// 접속 할때 부여받은 로그 ID 얻기
|
||||
int CDBAdminTool::GetNowLogID(unsigned int UID)
|
||||
{
|
||||
int GetLogID = 0;
|
||||
_snprintf(m_szQry, MAX_QUERY_LENGTH,
|
||||
"SELECT LogID FROM TblLog WHERE UID = %d ORDER BY LogID DESC", UID);
|
||||
|
||||
if(ExecuteQuery(m_szQry))
|
||||
{
|
||||
if(GetData(&GetLogID))
|
||||
{
|
||||
return GetLogID;
|
||||
}
|
||||
}
|
||||
|
||||
ERRLOG1(g_Log, "로그 ID를 얻는데 실패했습니다. Err- %s", GetErrorString());
|
||||
return -1;
|
||||
}
|
||||
|
||||
// 패스워드 변경
|
||||
bool CDBAdminTool::UpdatePasswd( PktAdminMgr::PktUpdatePasswd* UpdatePwd )
|
||||
{
|
||||
_snprintf(m_szQry, MAX_QUERY_LENGTH,
|
||||
"UPDATE TblToolAdmin SET strPasswd = '%s' WHERE strAdminID = '%s'",
|
||||
UpdatePwd->m_szPasswd, UpdatePwd->m_szAccount);
|
||||
|
||||
if(!ExecuteQuery(m_szQry))
|
||||
{
|
||||
ERRLOG2(g_Log, "쿼리 실패. 쿼리- %s, Err- %s",
|
||||
m_szQry, GetErrorString());
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
// 새로운 관리자 계정을 생성한다.
|
||||
BYTE CDBAdminTool::NewAdmin(PktAdminMgr::PktNewAdmin* NewAdmin)
|
||||
{
|
||||
if(AccountCheck(NewAdmin->m_szAccount)) // 사용 여부 체크
|
||||
{
|
||||
_snprintf(m_szQry, MAX_QUERY_LENGTH,
|
||||
"INSERT INTO TblToolAdmin(strAdminID, strPasswd, strLevel, strName, strIP) VALUES('%s', '%s', '%c', '%s', '%s')",
|
||||
NewAdmin->m_szAccount, NewAdmin->m_szPasswd, NewAdmin->m_szLev, NewAdmin->m_szName, NewAdmin->m_szIP);
|
||||
|
||||
if(!ExecuteQuery(m_szQry))
|
||||
{
|
||||
ERRLOG2(g_Log, "쿼리 실패. 쿼리- %s, Err- %s",
|
||||
m_szQry, GetErrorString());
|
||||
|
||||
return PktAdminMgr::PktResult::Err_Database; // 켁~
|
||||
}
|
||||
return PktAdminMgr::PktResult::Success_NewAdmin; // 만들기 성공~
|
||||
}
|
||||
else
|
||||
{
|
||||
return PktAdminMgr::PktResult::Err_OverlapID; // 씨또 중복아이디다.
|
||||
}
|
||||
|
||||
return PktAdminMgr::PktResult::Err_Unknown; // ㅡ.ㅡ;
|
||||
}
|
||||
|
||||
bool CDBAdminTool::AddBlockUser(PktAdminMgr::PktAddBlockUser* lpBlock, char* lpAdminName, char* szClientID)
|
||||
{
|
||||
char szQuery[MAX_QUERY_LENGTH];
|
||||
_snprintf(szQuery, MAX_QUERY_LENGTH,
|
||||
"dbo.CMS_DoingRestraintChar '%d', '%d', '%s', '%s', '%d', '%d', '%s', '%s', '%s'",
|
||||
lpBlock->m_cServerGroup, lpBlock->m_dwUID, szClientID, lpBlock->m_szCharacterName,
|
||||
lpBlock->m_cBlockTarget, lpBlock->m_cBlockTerm, lpBlock->m_szBlockFinishDateTime,
|
||||
lpAdminName, lpBlock->m_szDescription);
|
||||
|
||||
unsigned long dwResult = 0;
|
||||
|
||||
if (false == ExecuteQueryGetData(szQuery, &dwResult))
|
||||
{
|
||||
ERRLOG2(g_Log, "쿼리 실패. query- %s, Err- %s", szQuery, GetErrorString());
|
||||
return false;
|
||||
}
|
||||
|
||||
if(0 < dwResult)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool CDBAdminTool::DelBlockUser(PktAdminMgr::PktDelBlockUser* lpDelBlock)
|
||||
{
|
||||
char szQuery[MAX_QUERY_LENGTH];
|
||||
_snprintf(szQuery, MAX_QUERY_LENGTH, "dbo.USPDeleteRestraintChar '%d', '%d'",
|
||||
lpDelBlock->m_cServerGroup, lpDelBlock->m_nidx);
|
||||
|
||||
unsigned long dwResult = 0;
|
||||
|
||||
if (false == ExecuteQueryGetData(szQuery, &dwResult))
|
||||
{
|
||||
ERRLOG2(g_Log, "쿼리 실패. query- %s, Err- %s", szQuery, GetErrorString());
|
||||
return false;
|
||||
}
|
||||
|
||||
if(0 < dwResult)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool CDBAdminTool::InsertGMLogMsg(PktAdminMgr::PktGMLogMsg* lpPktGMLogMsg, char* szAdminID)
|
||||
{
|
||||
char szQuery[MAX_QUERY_LENGTH];
|
||||
_snprintf(szQuery, MAX_QUERY_LENGTH,
|
||||
"INSERT INTO TblGMLogMsg(UID, CID, ServerGroupID, LogMsg, AdminID) VALUES(%u, %u, %u, '%s', '%s')",
|
||||
lpPktGMLogMsg->m_dwUID, lpPktGMLogMsg->m_dwCID, lpPktGMLogMsg->m_dwServerGroup,
|
||||
lpPktGMLogMsg->m_szLogMsg, szAdminID);
|
||||
|
||||
if (false == ExecuteQuery(szQuery))
|
||||
{
|
||||
ERRLOG2(g_Log, "운영자 로그 삽입 실패. 쿼리- %s, Err- %s", szQuery, GetErrorString());
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CDBAdminTool::UpdateGMLogMsg(PktAdminMgr::PktGMLogMsg* lpPktGMLogMsg, char* szAdminID)
|
||||
{
|
||||
char szQuery[MAX_QUERY_LENGTH];
|
||||
_snprintf(szQuery, MAX_QUERY_LENGTH,
|
||||
"UPDATE TblGMLogMsg SET LogMsg = '%s', AdminID = '%s'"
|
||||
" WHERE LogID = %u AND UID = %u AND CID = %u AND ServerGroupID = %u",
|
||||
lpPktGMLogMsg->m_szLogMsg, szAdminID, lpPktGMLogMsg->m_dwLogID, lpPktGMLogMsg->m_dwUID,
|
||||
lpPktGMLogMsg->m_dwCID, lpPktGMLogMsg->m_dwServerGroup);
|
||||
|
||||
if (false == ExecuteQuery(szQuery))
|
||||
{
|
||||
ERRLOG2(g_Log, "운영자 로그 업데이트 실패. 쿼리- %s, Err- %s", szQuery, GetErrorString());
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CDBAdminTool::DeleteGMLogMsg(PktAdminMgr::PktGMLogMsg* lpPktGMLogMsg)
|
||||
{
|
||||
char szQuery[MAX_QUERY_LENGTH];
|
||||
_snprintf(szQuery, MAX_QUERY_LENGTH,
|
||||
"INSERT INTO TblGMLogMsg_Log(LogID, UID, CID, ServerGroupID, EditDate, LogMsg, AdminID) "
|
||||
"SELECT LogID, UID, CID, ServerGroupID, EditDate, LogMsg, AdminID FROM TblGMLogMsg WHERE LogID = %u",
|
||||
lpPktGMLogMsg->m_dwLogID);
|
||||
|
||||
if (false == ExecuteQuery(szQuery))
|
||||
{
|
||||
ERRLOG2(g_Log, "운영자 로그 삭제 실패(로그 남기기). 쿼리- %s, Err- %s", szQuery, GetErrorString());
|
||||
return false;
|
||||
}
|
||||
|
||||
_snprintf(szQuery, MAX_QUERY_LENGTH,
|
||||
"DELETE FROM TblGMLogMsg WHERE LogID = %u", lpPktGMLogMsg->m_dwLogID);
|
||||
|
||||
if (false == ExecuteQuery(szQuery))
|
||||
{
|
||||
ERRLOG2(g_Log, "운영자 로그 삭제 실패(로그 삭제). 쿼리- %s, Err- %s", szQuery, GetErrorString());
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CDBAdminTool::IsExistLogMsg(PktAdminMgr::PktGMLogMsg* lpPktGMLogMsg)
|
||||
{
|
||||
char szQuery[MAX_QUERY_LENGTH];
|
||||
if (0 == lpPktGMLogMsg->m_dwCID)
|
||||
{
|
||||
_snprintf(szQuery, MAX_QUERY_LENGTH,
|
||||
"SELECT TOP 1 LogID FROM TblGMLogMsg WHERE UID = %u AND CID = 0 AND ServerGroupID = %u",
|
||||
lpPktGMLogMsg->m_dwUID, lpPktGMLogMsg->m_dwServerGroup);
|
||||
}
|
||||
else
|
||||
{
|
||||
_snprintf(szQuery, MAX_QUERY_LENGTH,
|
||||
"SELECT TOP 1 LogID FROM TblGMLogMsg WHERE CID = %u AND ServerGroupID = %u",
|
||||
lpPktGMLogMsg->m_dwCID, lpPktGMLogMsg->m_dwServerGroup);
|
||||
}
|
||||
|
||||
unsigned long dwLogID = 0;
|
||||
if (false == ExecuteQueryGetData(szQuery, &dwLogID))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (0 == dwLogID)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
129
Server/AdminTool/AdminToolLibrary/dbcomponent/Ryl_AdminMgrDB.h
Normal file
129
Server/AdminTool/AdminToolLibrary/dbcomponent/Ryl_AdminMgrDB.h
Normal file
@@ -0,0 +1,129 @@
|
||||
#ifndef _RYL_ADMIN_MGR_DB_H_
|
||||
#define _RYL_ADMIN_MGR_DB_H_
|
||||
|
||||
#include <RylServerLibrary/DB/DBComponent.h>
|
||||
|
||||
// 쿼리 모음
|
||||
namespace QUERYZ
|
||||
{
|
||||
const char LoginInfo[] = "SELECT uid, strAdminID, strPasswd, strLevel, strName, strIP, CONVERT(varchar(11),dateRegit,102) FROM TblToolAdmin WHERE strAdminID = '%s'";
|
||||
const char NewAdminAck[] = "SELECT strAdminID, strName, strIP, convert(varchar(11),dateRegit,102), strLevel FROM TblToolAdmin WHERE strAdminID='%s'";
|
||||
const char LoginList[] = "SELECT LogID, CONVERT( varchar(20), Login, 120 ), CONVERT(varchar(20), Logout, 120 ), UseIP FROM TblLog WHERE UID=%d" ;
|
||||
const char DetailLog[] = "SELECT DetailLogID, CONVERT(varchar(20), UpdateDate, 120), UpdateType FROM TblDetailLog WHERE LogID=%d" ;
|
||||
const char ExitLog[] = "SELECT UseMsg FROM TblLog WHERE LogID = %d";
|
||||
const char AdminList[] = "SELECT strAdminID, strName, strIP, CONVERT(varchar(11),dateRegit,102), strLevel FROM TblToolAdmin" ;
|
||||
const char InsertDetailLog[] = "INSERT INTO TblDetailLog(LogID, UpdateType, Before, After) VALUES(%d, %d, '%s', '%s')";
|
||||
const char BeforeAfter[] = "SELECT Before, After FROM TblDetailLog WHERE DetailLogID=%d" ;
|
||||
const char GetLevel[] = "SELECT strLevel FROM TblToolAdmin WHERE strAdminID='%s'" ;
|
||||
const char GetIP[] = "SELECT strIP FROM TblToolAdmin WHERE strAdminID='%s'" ;
|
||||
const char GetPassword[] = "SELECT strPasswd FROM TblToolAdmin WHERE strAdminID='%s'" ;
|
||||
const char GetDelHistory[] = "SELECT intCID, intUID, NewServerGroupID, OldServerGroupID, CONVERT(varchar(20), dateInsertTime, 120), CONVERT(varchar(20), dateDeleteTime, 120), Name, CAST(Level as INT), Gold FROM TblCharDelHistory JOIN CharInfo ON TblCharDelHistory.intCID = CharInfo.CID WHERE %s=%d AND NewServerGroupID = %u";
|
||||
const char GetGuildInfo[] = "SELECT A.nGuildID, CAST(OldServerGroupID AS INT), strGuildName, CAST(tnGuildLevel AS INT), nGuildFame, nGuildGold, CAST(tnNationType as INT) FROM TblGuildInfo A JOIN TblGuildMember B ON A.nGuildID =B.nGuildID %s GROUP BY A.nGuildID, CAST(OldServerGroupID AS INT), strGuildName, CAST(tnGuildLevel as INT), nGuildFame, nGuildGold, CAST(tnNationType as INT)";
|
||||
const char GetFortInfo[] = "SELECT A.nCampID, A.nGuildID, B.strGuildName, A.nHP, A.tnZone, A.tnChannel, A.snObjectType, A.tnState, A.tnSubState, A.tnUpgradeStep,"
|
||||
"CONVERT(varchar(20), RemainTime, 120), CONVERT(varchar(20), LastUseTime, 120), A.fPosX, A.fPosY, A.fPosZ, A.tnMaterial, A.tnSiegeCount, A.bRight "
|
||||
"FROM TblCampInfo A INNER JOIN TblGuildInfo B ON A.nGuildID = B.nGuildID %s"
|
||||
"GROUP BY A.nCampID, A.nGuildID, B.strGuildName, A.nHP, A.tnZone, A.tnChannel, A.snObjectType,A.tnState, A.tnSubState, A.tnUpgradeStep,"
|
||||
"CONVERT(varchar(20), RemainTime, 120), CONVERT(varchar(20), LastUseTime, 120), A.bRight, A.fPosX, A.fPosY, A.fPosZ, A.tnMaterial, A.tnSiegeCount";
|
||||
const char GetMiningCamp[] = "SELECT * FROM TblCampMineralInfo %s";
|
||||
const char GetShopCamp[] = "SELECT * FROM TblCampShopInfo %s";
|
||||
const char GetCastleInfo[] = "SELECT * FROM TblCastleInfo %s";
|
||||
const char GetCastleCreatureInfo[] = "SELECT nCreatureID, nCastleID, nOwnerID, nHP, snObjectType, fDirection, tnState, tnSubState, tnUpgradeStep, tnUpgradeType, "
|
||||
"CONVERT(varchar(20), RemainTime, 120), CONVERT(varchar(20), LastUseTime, 120), fPosX, fPosY, fPosZ FROM TblCastleCreatureInfo %s";
|
||||
const char GetGuildMemberList[] = "SELECT nGuildID, nCID, nPosition, nPositionInGuild, CONVERT(varchar(20), tLeaveGuildTime, 120), Name, CAST(Level as INT), Fame, Class, Gold FROM TblGuildMember JOIN CharInfo ON TblGuildMember.nCID = CharInfo.CID WHERE nGuildID = %s";
|
||||
const char GetGuildRestoreData[] = "SELECT nGuildID, strGuildName, nGuildGold, CONVERT(varchar(20), tDeleteTime, 120) FROM TblGuildRestoreData";
|
||||
// edith 2009.08.14 관심유저 버그수정 (ROW_Activity DB사용)
|
||||
const char GetUserBillingLog[] = "SELECT strClientid, UID, CAST(tinyServerID AS INT), CONVERT(VARCHAR(20), FirstLoginTime, 120), CONVERT(VARCHAR(20), LogoutTime, 120), CAST(strIP AS VARCHAR(16)) FROM TblCurrentUser WHERE %s ORDER BY FirstLoginTime";
|
||||
// const char GetUserBillingLog[] = "SELECT strClientid, UID, CAST(tinyServerID AS INT), CONVERT(VARCHAR(20), FirstLoginTime, 120), CONVERT(VARCHAR(20), LogoutTime, 120), CAST(strIP AS VARCHAR(16)) FROM TblCurrentUser_Log WHERE %s ORDER BY FirstLoginTime";
|
||||
};
|
||||
|
||||
// 단순 참조용
|
||||
namespace PktAdminMgr
|
||||
{
|
||||
struct PktNewAdmin;
|
||||
struct PktUpdateLevel;
|
||||
struct PktUpdateIP;
|
||||
struct PktUpdatePasswd;
|
||||
struct PktAddBlockUser;
|
||||
struct PktDelBlockUser;
|
||||
struct PktInterestedUser;
|
||||
struct PktGMLogMsg;
|
||||
};
|
||||
|
||||
/*!
|
||||
\class CDBAdminTool
|
||||
운영툴 데이터 베이스
|
||||
*/
|
||||
class CDBAdminTool : public CDBComponent
|
||||
{
|
||||
public:
|
||||
#pragma pack(1)
|
||||
// 관리자 아이템 창고정보
|
||||
struct StoreInfo
|
||||
{
|
||||
enum TYPE
|
||||
{
|
||||
MAX_OWNER = 20,
|
||||
MAX_ITEM_NAME = 32
|
||||
};
|
||||
|
||||
unsigned char cServer;
|
||||
unsigned char szOwner[MAX_OWNER];
|
||||
unsigned char szItemName[MAX_ITEM_NAME];
|
||||
};
|
||||
|
||||
// 관리자 아이템 창고정보
|
||||
struct ItemInfo
|
||||
{
|
||||
enum TYPE
|
||||
{
|
||||
MAX_ITEM_ATTRIB = 90,
|
||||
};
|
||||
|
||||
unsigned long dwLength;
|
||||
char ItemAttrib[MAX_ITEM_ATTRIB];
|
||||
};
|
||||
#pragma pack()
|
||||
|
||||
public:
|
||||
|
||||
static CDBAdminTool& GetInstance();
|
||||
|
||||
bool ConnectAdminToolDB(); // SQL서버 접속
|
||||
|
||||
BYTE Login(char* szAccount, char* szPassword); // 로그인
|
||||
BYTE CheckIP(char* AdminID, char* szIP); // 아이피 체크
|
||||
bool AccountCheck(char* AdminID); // 중복여부 검사
|
||||
BYTE NewAdmin(PktAdminMgr::PktNewAdmin* NewAdmin); // 새로운 계정 생성
|
||||
bool DelAdmin(char* AdminID); // 계정 삭제
|
||||
bool UpdateLevel(PktAdminMgr::PktUpdateLevel* UpdateLev); // 계정 등급 변경
|
||||
bool UpdateIP(PktAdminMgr::PktUpdateIP* UpdateIP); // 계정 접속 IP변경
|
||||
bool UpdatePasswd(PktAdminMgr::PktUpdatePasswd* UpdatePwd); // 계정 패스워드 변경
|
||||
bool GetDate(char* DateTime); // 시간을 가져온다
|
||||
bool StartupLog(unsigned int UID, char* UseIP); // 로그인함과 동시에 호출. 기본 셋팅
|
||||
bool EndLog(unsigned int UID); // 로그아웃 정보 기록
|
||||
int GetMyUID(char* szAccount); // 해당계정의 UID를 가져온다
|
||||
int GetNowLogID(unsigned int UID); // 현재 사용중인 TblLog의 LogID를 가져온다
|
||||
bool UpdateLogoutDate(int LogID, char* szDate); // 로그아웃한 날짜와 시간
|
||||
bool UpdateExitLog(unsigned int LogID, char* szExitLog); // 사용사유 업데이트
|
||||
bool UpdateZoneList(unsigned int UID, char* In_Data); // 존 정보 저장
|
||||
bool GetZoneList(unsigned int UID, char* Out_Data); // 존 정보 가져오기
|
||||
|
||||
// 블럭
|
||||
bool AddBlockUser(PktAdminMgr::PktAddBlockUser* lpBlock, char* lpAdminName, char* szClientID); // 블럭
|
||||
bool DelBlockUser(PktAdminMgr::PktDelBlockUser* lpDelBlock); // 블럭 해제
|
||||
|
||||
// GM 로그 메세지 남기기
|
||||
bool IsExistLogMsg(PktAdminMgr::PktGMLogMsg* lpPktGMLogMsg);
|
||||
bool InsertGMLogMsg(PktAdminMgr::PktGMLogMsg* lpPktGMLogMsg, char* szAdminID);
|
||||
bool UpdateGMLogMsg(PktAdminMgr::PktGMLogMsg* lpPktGMLogMsg, char* szAdminID);
|
||||
bool DeleteGMLogMsg(PktAdminMgr::PktGMLogMsg* lpPktGMLogMsg);
|
||||
|
||||
private:
|
||||
|
||||
CDBAdminTool() { ;}
|
||||
virtual ~CDBAdminTool() { ;}
|
||||
|
||||
char m_szQry[MAX_QUERY_LENGTH];
|
||||
};
|
||||
|
||||
#endif
|
||||
184
Server/AdminTool/AdminToolLibrary/dbcomponent/Ryl_DetailLog.cpp
Normal file
184
Server/AdminTool/AdminToolLibrary/dbcomponent/Ryl_DetailLog.cpp
Normal file
@@ -0,0 +1,184 @@
|
||||
#include "stdafx.h"
|
||||
|
||||
#include "Ryl_DetailLog.h"
|
||||
#include "DBComponent/Ryl_AdminMgrDB.h"
|
||||
|
||||
#include <Network/Packet/PacketBase.h>
|
||||
#include <Log/ServerLog.h>
|
||||
|
||||
|
||||
char CDetailLog::m_szAfter [1024];
|
||||
char CDetailLog::m_szBefore[1024];
|
||||
char CDetailLog::m_szQuery [5000];
|
||||
|
||||
|
||||
CDetailLog::CDetailLog()
|
||||
{
|
||||
for(int nCMD = 0; nCMD < PktAdminMgr::PktCMD::PktEnd; ++nCMD)
|
||||
{
|
||||
PktLog[nCMD] = PktEmpty;
|
||||
}
|
||||
|
||||
PktLog[PktAdminMgr::PktCMD::PktNewAdmin] = PktNewAdmin;
|
||||
PktLog[PktAdminMgr::PktCMD::PktDelAdmin] = PktDelAdmin;
|
||||
PktLog[PktAdminMgr::PktCMD::PktUpdateLevel] = PktUpdateLevel;
|
||||
PktLog[PktAdminMgr::PktCMD::PktUpdateIP] = PktUpdateIP;
|
||||
PktLog[PktAdminMgr::PktCMD::PktUpdatePasswd] = PktUpdatePasswd;
|
||||
}
|
||||
|
||||
void CDetailLog::SetBefore(char* lpBefore, ...)
|
||||
{
|
||||
va_list Arguments;
|
||||
|
||||
va_start_ext(Arguments, lpBefore);
|
||||
_vsntprintf(CDetailLog::m_szBefore, sizeof(m_szBefore), lpBefore, Arguments);
|
||||
va_end(Arguments);
|
||||
}
|
||||
|
||||
void CDetailLog::SetAfter(char* lpAfter, ...)
|
||||
{
|
||||
va_list Arguments;
|
||||
|
||||
va_start_ext(Arguments, lpAfter);
|
||||
_vsntprintf(CDetailLog::m_szAfter, sizeof(m_szAfter), lpAfter, Arguments);
|
||||
va_end(Arguments);
|
||||
}
|
||||
|
||||
void CDetailLog::InsertLog(unsigned int LogID)
|
||||
{
|
||||
_snprintf(CDetailLog::m_szQuery, CDBAdminTool::MAX_QUERY_LENGTH,
|
||||
QUERYZ::InsertDetailLog, LogID, TYPE_ADMIN, CDetailLog::m_szBefore, CDetailLog::m_szAfter);
|
||||
}
|
||||
|
||||
void CDetailLog::PktNewAdmin(LOG_METHOD)
|
||||
{
|
||||
PktAdminMgr::PktNewAdmin* lpPktNewAdmin =
|
||||
static_cast<PktAdminMgr::PktNewAdmin*>(lpPktBase);
|
||||
|
||||
int len;
|
||||
|
||||
_snprintf(CDetailLog::m_szBefore, sizeof(CDetailLog::m_szBefore), "not exist contents");
|
||||
|
||||
_snprintf(CDetailLog::m_szAfter, sizeof(CDetailLog::m_szAfter),
|
||||
"[Tool Admin Account Registration]\r\n"
|
||||
"Account: %s\r\nPass: %s\r\nName: %s\r\nIP: %s\r\nLevel: %c",
|
||||
lpPktNewAdmin->m_szAccount, lpPktNewAdmin->m_szPasswd, lpPktNewAdmin->m_szName,
|
||||
lpPktNewAdmin->m_szIP, lpPktNewAdmin->m_szLev );
|
||||
|
||||
_snprintf(CDetailLog::m_szQuery, CDBAdminTool::MAX_QUERY_LENGTH,
|
||||
QUERYZ::InsertDetailLog, LogID, TYPE_ADMIN, CDetailLog::m_szBefore, CDetailLog::m_szAfter);
|
||||
|
||||
len = strlen(CDetailLog::m_szAfter);
|
||||
}
|
||||
|
||||
void CDetailLog::PktDelAdmin(LOG_METHOD)
|
||||
{
|
||||
PktAdminMgr::PktDelAdmin* lpPktDelAdmin =
|
||||
static_cast<PktAdminMgr::PktDelAdmin*>(lpPktBase);
|
||||
|
||||
_snprintf(CDetailLog::m_szBefore, sizeof(CDetailLog::m_szBefore), "not exist contents" );
|
||||
|
||||
_snprintf(CDetailLog::m_szAfter, sizeof(CDetailLog::m_szAfter),
|
||||
"[Tool Admin Account Delete]\r\nDeleted Account: %s", lpPktDelAdmin->m_szAccount);
|
||||
|
||||
_snprintf(CDetailLog::m_szQuery, CDBAdminTool::MAX_QUERY_LENGTH,
|
||||
QUERYZ::InsertDetailLog, LogID, TYPE_ADMIN, CDetailLog::m_szBefore, CDetailLog::m_szAfter);
|
||||
}
|
||||
|
||||
void CDetailLog::PktUpdateLevel(LOG_METHOD)
|
||||
{
|
||||
PktAdminMgr::PktUpdateLevel* lpPktUpdateLevel =
|
||||
static_cast<PktAdminMgr::PktUpdateLevel*>(lpPktBase);
|
||||
|
||||
char szLevel[2];
|
||||
char szAfterQuery[4096];
|
||||
|
||||
_snprintf(szAfterQuery, sizeof(szAfterQuery),
|
||||
QUERYZ::GetLevel, lpPktUpdateLevel->m_szAccount);
|
||||
|
||||
if(CDBAdminTool::GetInstance().ExecuteQuery(szAfterQuery))
|
||||
{
|
||||
if(CDBAdminTool::GetInstance().GetData(&szLevel))
|
||||
{
|
||||
_snprintf(CDetailLog::m_szBefore, sizeof(CDetailLog::m_szBefore),
|
||||
"[Tool Admin Level Edit]\r\nAccount: %s\r\nOld Level: %c",
|
||||
lpPktUpdateLevel->m_szAccount, szLevel[0]);
|
||||
|
||||
_snprintf(CDetailLog::m_szAfter, sizeof(CDetailLog::m_szAfter),
|
||||
"New Level: %c", lpPktUpdateLevel->m_szLevel);
|
||||
|
||||
_snprintf(CDetailLog::m_szQuery, CDBAdminTool::MAX_QUERY_LENGTH,
|
||||
QUERYZ::InsertDetailLog, LogID, TYPE_ADMIN, CDetailLog::m_szBefore, CDetailLog::m_szAfter);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void CDetailLog::PktUpdateIP(LOG_METHOD)
|
||||
{
|
||||
PktAdminMgr::PktUpdateIP* lpPktUpdateIP =
|
||||
static_cast<PktAdminMgr::PktUpdateIP*>(lpPktBase);
|
||||
|
||||
char szIP[PktAdminMgr::MAX_IP];
|
||||
char szBeforeQuery[4096];
|
||||
|
||||
_snprintf(szBeforeQuery, sizeof(szBeforeQuery),
|
||||
QUERYZ::GetIP, lpPktUpdateIP->m_szAccount);
|
||||
|
||||
if(CDBAdminTool::GetInstance().ExecuteQuery(szBeforeQuery))
|
||||
{
|
||||
if(CDBAdminTool::GetInstance().GetData(&szIP))
|
||||
{
|
||||
_snprintf(CDetailLog::m_szBefore, sizeof(CDetailLog::m_szBefore),
|
||||
"[Tool Admin IP Edit]\r\nAccount: %s\r\nOld IP: %s",
|
||||
lpPktUpdateIP->m_szAccount, szIP );
|
||||
|
||||
_snprintf(CDetailLog::m_szAfter, sizeof(CDetailLog::m_szAfter),
|
||||
"New IP: %s", lpPktUpdateIP->m_szIP);
|
||||
|
||||
_snprintf(CDetailLog::m_szQuery, CDBAdminTool::MAX_QUERY_LENGTH,
|
||||
QUERYZ::InsertDetailLog, LogID, TYPE_ADMIN, CDetailLog::m_szBefore, CDetailLog::m_szAfter);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void CDetailLog::PktUpdatePasswd(LOG_METHOD)
|
||||
{
|
||||
PktAdminMgr::PktUpdatePasswd* lpPktUpdatePasswd = static_cast<PktAdminMgr::PktUpdatePasswd*>(lpPktBase);
|
||||
|
||||
char szPassword[PktAdminMgr::MAX_PASSWORD];
|
||||
char szBeforeQuery[4096];
|
||||
|
||||
_snprintf(szBeforeQuery, sizeof(szBeforeQuery), QUERYZ::GetPassword, lpPktUpdatePasswd->m_szAccount);
|
||||
|
||||
if(CDBAdminTool::GetInstance().ExecuteQuery(szBeforeQuery))
|
||||
{
|
||||
if(CDBAdminTool::GetInstance().GetData(&szPassword))
|
||||
{
|
||||
_snprintf(CDetailLog::m_szBefore, sizeof(CDetailLog::m_szBefore),
|
||||
"[Tool Admin Pass Edit]\r\nAccount: %s\r\nOld Pass: %s",
|
||||
lpPktUpdatePasswd->m_szAccount, szPassword);
|
||||
|
||||
_snprintf(CDetailLog::m_szAfter, sizeof(CDetailLog::m_szAfter),
|
||||
"New Pass: %s", lpPktUpdatePasswd->m_szPasswd);
|
||||
|
||||
_snprintf(CDetailLog::m_szQuery, CDBAdminTool::MAX_QUERY_LENGTH,
|
||||
QUERYZ::InsertDetailLog, LogID, TYPE_ADMIN, CDetailLog::m_szBefore, CDetailLog::m_szAfter);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void CDetailLog::UpdateDetailLog()
|
||||
{
|
||||
if(0 != strlen(CDetailLog::m_szQuery))
|
||||
{
|
||||
if(!CDBAdminTool::GetInstance().ExecuteQuery(CDetailLog::m_szQuery))
|
||||
{
|
||||
ERRLOG2(g_Log, "운영툴 사용내역 로그를 남기는데 실패했습니다. 쿼리-%s, Err-%s",
|
||||
CDetailLog::m_szQuery, CDBAdminTool::GetInstance().GetErrorString());
|
||||
}
|
||||
|
||||
ZeroMemory(CDetailLog::m_szQuery, sizeof(CDetailLog::m_szQuery));
|
||||
ZeroMemory(CDetailLog::m_szBefore, sizeof(CDetailLog::m_szBefore));
|
||||
ZeroMemory(CDetailLog::m_szAfter, sizeof(CDetailLog::m_szAfter));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,48 @@
|
||||
#ifndef _RYL_DETAILLOG_H_
|
||||
#define _RYL_DETAILLOG_H_
|
||||
|
||||
#include <Network/Protocol/Ryl_AdminMgrProtocol.h>
|
||||
|
||||
#define LOG_METHOD PktBase* lpPktBase, unsigned int LogID
|
||||
|
||||
struct PktBase;
|
||||
|
||||
/*!
|
||||
\class CDetailLog
|
||||
운영툴 사용기록 로그 클래스
|
||||
*/
|
||||
class CDetailLog
|
||||
{
|
||||
enum LOGTYPE
|
||||
{
|
||||
TYPE_ADMIN = 1,
|
||||
TYPE_ITEM,
|
||||
};
|
||||
|
||||
public:
|
||||
CDetailLog();
|
||||
~CDetailLog() {}
|
||||
|
||||
void (*PktLog[PktAdminMgr::PktCMD::PktEnd]) (LOG_METHOD); // 패킷인덱스 연결 로그 포인터 함수
|
||||
|
||||
void UpdateDetailLog(); // 디비에 로그 기록
|
||||
|
||||
void InsertLog(unsigned int LogID); // 로그 추가
|
||||
|
||||
void SetBefore(char* lpBefore, ...);
|
||||
void SetAfter (char* lpAfter, ...);
|
||||
|
||||
private:
|
||||
static char m_szBefore[1024];
|
||||
static char m_szAfter[1024];
|
||||
static char m_szQuery[5000];
|
||||
|
||||
static void PktEmpty (LOG_METHOD) {}
|
||||
static void PktNewAdmin (LOG_METHOD); // 관리자 계정추가
|
||||
static void PktDelAdmin (LOG_METHOD); // 관리자 계정삭제
|
||||
static void PktUpdateLevel (LOG_METHOD); // 관리자 권한 변경
|
||||
static void PktUpdateIP (LOG_METHOD); // 관리자 접속 IP변경
|
||||
static void PktUpdatePasswd (LOG_METHOD); // 관리자 패스워드 변경
|
||||
};
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user