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:
2025-11-29 20:17:20 +09:00
parent 5d3cd64a25
commit dd97ddec92
11602 changed files with 1446576 additions and 0 deletions

View 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;
}

View 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

View 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;
}

View 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

View 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;
}

View 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

View 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;
}

View 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

View 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));
}
}

View File

@@ -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