#include "stdafx.h" #include #include #include #include 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; }