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:
@@ -0,0 +1,537 @@
|
||||
#include "stdafx.h"
|
||||
#include "ManageClientManager.h"
|
||||
|
||||
#include <DB/SQLite.h>
|
||||
#include <DB/ManageServerDB.h>
|
||||
#include <Log/ServerLog.h>
|
||||
|
||||
|
||||
CManageClientManager& CManageClientManager::GetInstance()
|
||||
{
|
||||
static CManageClientManager manageClientManager(CManageServerDB::GetInstance());
|
||||
return manageClientManager;
|
||||
}
|
||||
|
||||
|
||||
CManageClientManager::CManageClientManager(CManageServerDB& manageServerDB)
|
||||
: m_ManageServerDB(manageServerDB)
|
||||
{
|
||||
ReloadRunInfo();
|
||||
}
|
||||
|
||||
CManageClientManager::~CManageClientManager()
|
||||
{
|
||||
|
||||
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------------------------
|
||||
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
bool CManageClientManager::Add(InfoType eInfoType,
|
||||
const ServerManage::RunInfo& runInfo,
|
||||
unsigned long& dwID_Out)
|
||||
{
|
||||
const int MAX_QUERY_LEN = 512;
|
||||
char szQuery[MAX_QUERY_LEN];
|
||||
int nQueryLen = -1;
|
||||
|
||||
switch(eInfoType)
|
||||
{
|
||||
case SERVER_INFO:
|
||||
nQueryLen = _snprintf(szQuery, MAX_QUERY_LEN - 1,
|
||||
"INSERT INTO TblServerInfo values(%d, '%s')",
|
||||
runInfo.m_dwServerIP, runInfo.m_szServerName);
|
||||
break;
|
||||
|
||||
case RUN_PATH_INFO:
|
||||
|
||||
nQueryLen = _snprintf(szQuery, MAX_QUERY_LEN - 1,
|
||||
"INSERT INTO TblRunPath values(NULL, '%s')", runInfo.m_szPath);
|
||||
break;
|
||||
|
||||
case OPTION_INFO:
|
||||
|
||||
nQueryLen = _snprintf(szQuery, MAX_QUERY_LEN - 1,
|
||||
"INSERT INTO TblRunOptions values(NULL, '%s')", runInfo.m_szOption);
|
||||
break;
|
||||
|
||||
case RUN_INFO:
|
||||
|
||||
nQueryLen = _snprintf(szQuery, MAX_QUERY_LEN - 1,
|
||||
"INSERT INTO TblRunInfo values(NULL, %d, %d, %d)",
|
||||
runInfo.m_dwPathID, runInfo.m_dwOptionID, runInfo.m_dwServerIP);
|
||||
break;
|
||||
|
||||
default:
|
||||
|
||||
ERRLOG1(g_Log, "Unknown InfoType : %d", eInfoType);
|
||||
return false;
|
||||
};
|
||||
|
||||
szQuery[MAX_QUERY_LEN - 1] = 0;
|
||||
if(nQueryLen <= 0)
|
||||
{
|
||||
ERRLOG1(g_Log, "Make query failed : %s", szQuery);
|
||||
return false;
|
||||
}
|
||||
|
||||
CSQLite::Dataset executeQuery(m_ManageServerDB.GetSQLite(), szQuery);
|
||||
if(!executeQuery.Compile() || !executeQuery.Execute())
|
||||
{
|
||||
if(0 != executeQuery.GetLastError())
|
||||
{
|
||||
ERRLOG2(g_Log, "Add failed : error : %s(Query:%s)",
|
||||
executeQuery.GetLastError(), szQuery);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
dwID_Out = m_ManageServerDB.GetSQLite().GetLastInsertRowID();
|
||||
return ReloadRunInfo();
|
||||
}
|
||||
|
||||
bool CManageClientManager::Modify(InfoType eInfoType, const ServerManage::RunInfo& runInfo)
|
||||
{
|
||||
const int MAX_QUERY_LEN = 512;
|
||||
char szQuery[MAX_QUERY_LEN];
|
||||
int nQueryLen = -1;
|
||||
|
||||
switch(eInfoType)
|
||||
{
|
||||
case SERVER_INFO:
|
||||
nQueryLen = _snprintf(szQuery, MAX_QUERY_LEN - 1,
|
||||
"UPDATE TblServerInfo SET ServerName = '%s' WHERE IP = %d",
|
||||
runInfo.m_szServerName, runInfo.m_dwServerIP);
|
||||
break;
|
||||
|
||||
case RUN_PATH_INFO:
|
||||
nQueryLen = _snprintf(szQuery, MAX_QUERY_LEN - 1,
|
||||
"UPDATE TblRunPath SET RunPath = '%s' WHERE PathID = %d",
|
||||
runInfo.m_szPath, runInfo.m_dwPathID);
|
||||
break;
|
||||
|
||||
case OPTION_INFO:
|
||||
nQueryLen = _snprintf(szQuery, MAX_QUERY_LEN - 1,
|
||||
"UPDATE TblRunOptions SET RunOption = '%s' WHERE OptionID = %d",
|
||||
runInfo.m_szOption, runInfo.m_dwOptionID);
|
||||
break;
|
||||
|
||||
case RUN_INFO:
|
||||
|
||||
nQueryLen = _snprintf(szQuery, MAX_QUERY_LEN - 1,
|
||||
"UPDATE TblRunInfo SET PathID = %d, OptionID = %d, ServerIP = %d WHERE RunID = %d",
|
||||
runInfo.m_dwPathID, runInfo.m_dwOptionID, runInfo.m_dwServerIP, runInfo.m_dwRunID);
|
||||
break;
|
||||
|
||||
default:
|
||||
ERRLOG1(g_Log, "Unknown InfoType : %d", eInfoType);
|
||||
return false;
|
||||
};
|
||||
|
||||
szQuery[MAX_QUERY_LEN - 1] = 0;
|
||||
if(nQueryLen <= 0)
|
||||
{
|
||||
ERRLOG1(g_Log, "Make query failed : %s", szQuery);
|
||||
return false;
|
||||
}
|
||||
|
||||
CSQLite::Dataset executeQuery(m_ManageServerDB.GetSQLite(), szQuery);
|
||||
if(!executeQuery.Compile() || !executeQuery.Execute())
|
||||
{
|
||||
if(0 != executeQuery.GetLastError())
|
||||
{
|
||||
ERRLOG2(g_Log, "Modify failed : error : %s(Query:%s)",
|
||||
executeQuery.GetLastError(), szQuery);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
return ReloadRunInfo();
|
||||
}
|
||||
|
||||
bool CManageClientManager::Remove(InfoType eInfoType, unsigned long dwID, bool bDeleteRelated)
|
||||
{
|
||||
const int MAX_QUERY_LEN = 512;
|
||||
char szQuery[MAX_QUERY_LEN];
|
||||
char szDeleteRelated[MAX_QUERY_LEN];
|
||||
|
||||
const char* szRelatedKey = 0;
|
||||
|
||||
int nQueryLen = -1;
|
||||
|
||||
switch(eInfoType)
|
||||
{
|
||||
case SERVER_INFO:
|
||||
nQueryLen = _snprintf(szQuery, MAX_QUERY_LEN - 1,
|
||||
"DELETE FROM TblServerInfo WHERE IP = %d", dwID);
|
||||
szRelatedKey = "ServerIP";
|
||||
break;
|
||||
|
||||
case RUN_PATH_INFO:
|
||||
nQueryLen = _snprintf(szQuery, MAX_QUERY_LEN - 1,
|
||||
"DELETE FROM TblRunPath WHERE PathID = %d;", dwID);
|
||||
szRelatedKey = "PathID";
|
||||
break;
|
||||
|
||||
case OPTION_INFO:
|
||||
nQueryLen = _snprintf(szQuery, MAX_QUERY_LEN - 1,
|
||||
"DELETE FROM TblRunOptions WHERE OptionID = %d;", dwID);
|
||||
szRelatedKey = "OptionID";
|
||||
break;
|
||||
|
||||
case RUN_INFO:
|
||||
|
||||
nQueryLen = _snprintf(szQuery, MAX_QUERY_LEN - 1,
|
||||
"DELETE FROM TblRunInfo WHERE RunID = %d", dwID);
|
||||
break;
|
||||
|
||||
default:
|
||||
|
||||
ERRLOG1(g_Log, "Unknown InfoType : %d", eInfoType);
|
||||
return false;
|
||||
};
|
||||
|
||||
szQuery[MAX_QUERY_LEN - 1] = 0;
|
||||
if(nQueryLen <= 0)
|
||||
{
|
||||
ERRLOG1(g_Log, "Make query failed : %s", szQuery);
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
CSQLite::Dataset executeQuery(m_ManageServerDB.GetSQLite(), szQuery);
|
||||
if(!executeQuery.Compile() || !executeQuery.Execute())
|
||||
{
|
||||
if(0 != executeQuery.GetLastError())
|
||||
{
|
||||
ERRLOG2(g_Log, "Delete failed : error : %s(Query:%s)",
|
||||
executeQuery.GetLastError(), szQuery);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
if(bDeleteRelated && 0 != szRelatedKey)
|
||||
{
|
||||
nQueryLen = _snprintf(szDeleteRelated, MAX_QUERY_LEN - 1,
|
||||
"DELETE FROM TblRunInfo WHERE %s = %d;", szRelatedKey, dwID);
|
||||
|
||||
if(nQueryLen <= 0)
|
||||
{
|
||||
ERRLOG1(g_Log, "Make query failed : %s", szDeleteRelated);
|
||||
return false;
|
||||
}
|
||||
|
||||
CSQLite::Dataset deleteRelatedQuery(m_ManageServerDB.GetSQLite(), szDeleteRelated);
|
||||
if(!deleteRelatedQuery.Compile() || !deleteRelatedQuery.Execute())
|
||||
{
|
||||
if(0 != deleteRelatedQuery.GetLastError())
|
||||
{
|
||||
ERRLOG2(g_Log, "Delete related failed : error : %s(Query:%s)",
|
||||
deleteRelatedQuery.GetLastError(), szDeleteRelated);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return ReloadRunInfo();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
int GetServerInfoCallback(void *callBackArg, int nColumnNum,
|
||||
char **szColumnValues, char **szColumnNames)
|
||||
{
|
||||
if(2 == nColumnNum)
|
||||
{
|
||||
CManageClientManager::RunTable& runTable =
|
||||
*reinterpret_cast<CManageClientManager::RunTable*>(callBackArg);
|
||||
|
||||
ServerManage::RunInfo runInfo;
|
||||
memset(&runInfo, 0, sizeof(ServerManage::RunInfo));
|
||||
|
||||
runInfo.m_dwServerIP = atol(szColumnValues[0]);
|
||||
_snprintf(runInfo.m_szServerName, ServerManage::RunInfo::MAX_SERVER_NAME - 1,
|
||||
"%s", szColumnValues[1]);
|
||||
|
||||
runInfo.m_szServerName[ServerManage::RunInfo::MAX_SERVER_NAME - 1] = 0;
|
||||
|
||||
if(!runTable.insert(CManageClientManager::RunTable::value_type(
|
||||
runInfo.m_dwServerIP, runInfo)).second)
|
||||
{
|
||||
ERRLOG1(g_Log, "Insert failed. Key : %d", runInfo.m_dwServerIP);
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int GetPathInfoCallback(void *callBackArg, int nColumnNum,
|
||||
char **szColumnValues, char **szColumnNames)
|
||||
{
|
||||
if(2 == nColumnNum)
|
||||
{
|
||||
CManageClientManager::RunTable& runTable =
|
||||
*reinterpret_cast<CManageClientManager::RunTable*>(callBackArg);
|
||||
|
||||
ServerManage::RunInfo runInfo;
|
||||
memset(&runInfo, 0, sizeof(ServerManage::RunInfo));
|
||||
|
||||
runInfo.m_dwPathID = atol(szColumnValues[0]);
|
||||
|
||||
_snprintf(runInfo.m_szPath, ServerManage::RunInfo::MAX_PATH_LEN - 1,
|
||||
"%s", szColumnValues[1]);
|
||||
|
||||
runInfo.m_szPath[ServerManage::RunInfo::MAX_PATH_LEN - 1] = 0;
|
||||
|
||||
if(!runTable.insert(CManageClientManager::RunTable::value_type(
|
||||
runInfo.m_dwPathID, runInfo)).second)
|
||||
{
|
||||
ERRLOG1(g_Log, "Insert failed. Key : %d", runInfo.m_dwPathID);
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int GetOptionInfoCallback(void *callBackArg, int nColumnNum,
|
||||
char **szColumnValues, char **szColumnNames)
|
||||
{
|
||||
if(2 == nColumnNum)
|
||||
{
|
||||
CManageClientManager::RunTable& runTable =
|
||||
*reinterpret_cast<CManageClientManager::RunTable*>(callBackArg);
|
||||
|
||||
ServerManage::RunInfo runInfo;
|
||||
memset(&runInfo, 0, sizeof(ServerManage::RunInfo));
|
||||
|
||||
runInfo.m_dwOptionID = atol(szColumnValues[0]);
|
||||
|
||||
_snprintf(runInfo.m_szOption, ServerManage::RunInfo::MAX_OPT_LEN - 1,
|
||||
"%s", szColumnValues[1]);
|
||||
|
||||
runInfo.m_szOption[ServerManage::RunInfo::MAX_OPT_LEN - 1] = 0;
|
||||
|
||||
if(!runTable.insert(CManageClientManager::RunTable::value_type(
|
||||
runInfo.m_dwOptionID, runInfo)).second)
|
||||
{
|
||||
ERRLOG1(g_Log, "Insert failed. Key : %d", runInfo.m_dwOptionID);
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int GetRunInfoCallback(void *callBackArg, int nColumnNum,
|
||||
char **szColumnValues, char **szColumnNames)
|
||||
{
|
||||
if(4 == nColumnNum)
|
||||
{
|
||||
CManageClientManager::RunTable& runTable =
|
||||
*reinterpret_cast<CManageClientManager::RunTable*>(callBackArg);
|
||||
|
||||
ServerManage::RunInfo runInfo;
|
||||
memset(&runInfo, 0, sizeof(ServerManage::RunInfo));
|
||||
|
||||
runInfo.m_dwRunID = atol(szColumnValues[0]);
|
||||
runInfo.m_dwPathID = atol(szColumnValues[1]);
|
||||
runInfo.m_dwOptionID = atol(szColumnValues[2]);
|
||||
runInfo.m_dwServerIP = atol(szColumnValues[3]);
|
||||
|
||||
if(!runTable.insert(CManageClientManager::RunTable::value_type(
|
||||
runInfo.m_dwRunID, runInfo)).second)
|
||||
{
|
||||
ERRLOG1(g_Log, "Insert failed. Key : %d", runInfo.m_dwOptionID);
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
bool CManageClientManager::Get(InfoType eInfoType, RunTable& runTable)
|
||||
{
|
||||
runTable.clear();
|
||||
|
||||
const char* szQuery = 0;
|
||||
CSQLite::QueryCallBack lpQueryCallBack = 0;
|
||||
|
||||
switch(eInfoType)
|
||||
{
|
||||
case SERVER_INFO:
|
||||
szQuery = "SELECT IP, ServerName FROM TblServerInfo";
|
||||
lpQueryCallBack = GetServerInfoCallback;
|
||||
break;
|
||||
|
||||
case RUN_PATH_INFO:
|
||||
szQuery = "SELECT PathID, RunPath FROM TblRunPath";
|
||||
lpQueryCallBack = GetPathInfoCallback;
|
||||
break;
|
||||
|
||||
case OPTION_INFO:
|
||||
szQuery = "SELECT OptionID, RunOption FROM TblRunOptions";
|
||||
lpQueryCallBack = GetOptionInfoCallback;
|
||||
break;
|
||||
|
||||
case RUN_INFO:
|
||||
szQuery = "SELECT RunID, PathID, OptionID, ServerIP FROM TblRunInfo";
|
||||
lpQueryCallBack = GetRunInfoCallback;
|
||||
break;
|
||||
|
||||
default:
|
||||
ERRLOG1(g_Log, "Unknown InfoType : %d", eInfoType);
|
||||
return false;
|
||||
};
|
||||
|
||||
if(!m_ManageServerDB.GetSQLite().ExecuteQuery(szQuery, lpQueryCallBack, &runTable))
|
||||
{
|
||||
const char* szError = m_ManageServerDB.GetSQLite().GetLastError();
|
||||
if(0 != szError)
|
||||
{
|
||||
ERRLOG2(g_Log, "Query failed : refresh runinfo failed : %s(Query:%s)",
|
||||
szError, szQuery);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
// ----------------------------------------------------------------------------------------------
|
||||
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
bool CManageClientManager::GetRunInfo(ServerManage::RunInfo* lpRunInfo_Out, size_t* nArrayNum_InOut)
|
||||
{
|
||||
size_t nRunTableSize = m_RunTable.size();
|
||||
|
||||
if(0 != lpRunInfo_Out && 0 != nArrayNum_InOut && nRunTableSize <= *nArrayNum_InOut)
|
||||
{
|
||||
RunTable::iterator pos = m_RunTable.begin();
|
||||
RunTable::iterator end = m_RunTable.end();
|
||||
|
||||
for(; pos != end; ++pos, ++lpRunInfo_Out)
|
||||
{
|
||||
*lpRunInfo_Out = pos->second;
|
||||
}
|
||||
|
||||
*nArrayNum_InOut = nRunTableSize;
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool CManageClientManager::GetRunInfo(unsigned long dwRunID, ServerManage::RunInfo& runInfo_Out)
|
||||
{
|
||||
RunTable::iterator pos = m_RunTable.find(dwRunID);
|
||||
if(pos != m_RunTable.end())
|
||||
{
|
||||
runInfo_Out = pos->second;
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool CManageClientManager::HasRunInfo(unsigned long dwRunID)
|
||||
{
|
||||
return m_RunTable.find(dwRunID) != m_RunTable.end();
|
||||
}
|
||||
|
||||
void CManageClientManager::GetRunInfoFromIP(unsigned long dwServerIP, RunTable& runTable)
|
||||
{
|
||||
RunTable::iterator pos = m_RunTable.begin();
|
||||
RunTable::iterator end = m_RunTable.end();
|
||||
|
||||
for(; pos != end; ++pos)
|
||||
{
|
||||
RunTable::value_type& data = *pos;
|
||||
|
||||
if(data.second.m_dwServerIP == dwServerIP)
|
||||
{
|
||||
runTable.insert(data);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
int ReloadRunInfoCallback(void *callBackArg, int nColumnNum, char **szColumnValues, char **szColumnNames)
|
||||
{
|
||||
CManageClientManager::RunTable& runTable =
|
||||
*reinterpret_cast<CManageClientManager::RunTable*>(callBackArg);
|
||||
|
||||
if(7 == nColumnNum)
|
||||
{
|
||||
ServerManage::RunInfo runInfo;
|
||||
memset(&runInfo, 0, sizeof(ServerManage::RunInfo));
|
||||
|
||||
runInfo.m_dwRunID = atol(szColumnValues[0]);
|
||||
runInfo.m_dwServerIP = atol(szColumnValues[1]);
|
||||
runInfo.m_dwPathID = atol(szColumnValues[2]);
|
||||
runInfo.m_dwOptionID = atol(szColumnValues[3]);
|
||||
|
||||
_snprintf(runInfo.m_szServerName, ServerManage::RunInfo::MAX_SERVER_NAME - 1,
|
||||
"%s", szColumnValues[4]);
|
||||
|
||||
runInfo.m_szServerName[ServerManage::RunInfo::MAX_SERVER_NAME - 1] = 0;
|
||||
|
||||
_snprintf(runInfo.m_szPath, ServerManage::RunInfo::MAX_PATH_LEN - 1,
|
||||
"%s", szColumnValues[5]);
|
||||
|
||||
runInfo.m_szPath[ServerManage::RunInfo::MAX_PATH_LEN - 1] = 0;
|
||||
|
||||
_snprintf(runInfo.m_szOption, ServerManage::RunInfo::MAX_OPT_LEN - 1,
|
||||
"%s", szColumnValues[6]);
|
||||
|
||||
runInfo.m_szOption[ServerManage::RunInfo::MAX_OPT_LEN - 1] = 0;
|
||||
|
||||
if(!runTable.insert(CManageClientManager::RunTable::value_type(
|
||||
atol(szColumnValues[0]), runInfo)).second)
|
||||
{
|
||||
ERRLOG0(g_Log, "Reload failed");
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
bool CManageClientManager::ReloadRunInfo()
|
||||
{
|
||||
m_RunTable.clear();
|
||||
|
||||
const char* szQuery = "SELECT TblRunInfo.RunID, TblRunInfo.ServerIP, TblRunInfo.PathID, "
|
||||
"TblRunInfo.OptionID, TblServerInfo.ServerName, TblRunPath.RunPath, TblRunOptions.RunOption "
|
||||
"FROM TblRunInfo "
|
||||
"LEFT OUTER JOIN TblRunPath ON TblRunInfo.PathID = TblRunPath.PathID "
|
||||
"LEFT OUTER JOIN TblRunOptions ON TblRunInfo.OptionID = TblRunOptions.OptionID "
|
||||
"LEFT OUTER JOIN TblServerInfo ON TblRunInfo.ServerIP = TblServerInfo.IP ";
|
||||
|
||||
if(!m_ManageServerDB.GetSQLite().ExecuteQuery(szQuery, ReloadRunInfoCallback, &m_RunTable))
|
||||
{
|
||||
const char* szError = m_ManageServerDB.GetSQLite().GetLastError();
|
||||
if(0 != szError)
|
||||
{
|
||||
ERRLOG2(g_Log, "Query failed : refresh runinfo failed : %s(Query:%s)",
|
||||
szError, szQuery);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user