#include "stdafx.h" #include "RYL_AdminManagerServer.h" #include "RYL_AdminWindow.h" #include "RYL_AdminMgrDispatch.h" #include "RYL_AgentServerTable.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "RYL_AdminServerCommand.h" CRylAdminManagerServer CRylAdminManagerServer::ms_this; unsigned char PktAdminMgr::AuthorityMask::AdminAuthority[PktAdminMgr::PktCMD::PktEnd]; // ServerFramework Process »ó¼Ó.. ( Thread ) class CAdminToolProcessThread : public CProcessThread { public: enum Const { PROCESS_TPP = 100, // 200ms(0.2ÃÊ) ¿¡ 1ƽ. CONNECT_CHECK = 10, // 10ƽ - 3Ãʸ¶´Ù ¿¬°á üũ INTERESTED_USER_CHK = 10 // 3Ãʸ¶´Ù °ü½ÉÀ¯Àú Á¢¼Ó üũ }; CAdminToolProcessThread(CRylAdminManagerServer& AdminServer) : CProcessThread(AdminServer, PROCESS_TPP) , m_AdminServer(AdminServer) { } ~CAdminToolProcessThread() { } private: virtual void Cleanup(CPulse& Pulse) { } virtual void InternalRun(CPulse& Pulse) { unsigned long dwCurrentPulse = Pulse.GetCurrentPulse(); if(0 == (dwCurrentPulse % CONNECT_CHECK)) { m_AdminServer.PrintServerInfo(); //CRylAdminManagerServer.PrintStatistics(); } // 10ÃÊ¿¡ Çѹø Å×½ºÆ® if(Pulse.ProcessBySecond(10)) { if((CAgentServerTable::GetInstance().GetBillingDB() && CAgentServerTable::GetInstance().GetBillingDB()->GetQueryErrorCount() >= 1) || (CAgentServerTable::GetInstance().GetAuthDB() && CAgentServerTable::GetInstance().GetAuthDB()->GetQueryErrorCount() >= 1) ) { CAgentServerTable::GetInstance().InitAgentServerTable(*m_AdminServer.GetIOCPNet()); } // DBÅ×½ºÆ® // edith 2009.10.1 DB ÀÚµ¿ Ä¿³ØÆ® Ãß°¡±â´É // 10ÃÊ¿¡ Çѹø¾¿ ³×Æ®¿öÅ© ¿À·ù¸¦ °Ë»çÇÑ´Ù. // Äõ¸® ¿¡·¯°¡ ¿¬¼ÓÀ¸·Î 10¹øÀÌ»ó ÀϾ¸é DB¿¡ ¸Õ°¡ ¹®Á¦°¡ ÀÖ´Ù. if(CDBAdminTool::GetInstance().GetQueryErrorCount() >= 1) { // DB¿¡ »õ·Î Ä¿³ØÆ®¸¦ ½ÃµµÇÑ´Ù. CDBAdminTool::GetInstance().ConnectAdminToolDB(); } } } CRylAdminManagerServer& m_AdminServer; }; CRylAdminManagerServer& CRylAdminManagerServer::GetInstance() { static CRylAdminManagerServer ServerInstance; return ServerInstance; } CRylAdminManagerServer::CRylAdminManagerServer() : m_bInitializedClientListener(FALSE) , m_lpClientSessionPolicy(SessionPolicy::CreateTCPPolicy()) { } CRylAdminManagerServer::~CRylAdminManagerServer() { if(0 != m_lpClientSessionPolicy) { m_lpClientSessionPolicy->Release(); m_lpClientSessionPolicy = 0; } } bool CRylAdminManagerServer::ApplicationSpecificInit(const TCHAR* szCmdLine) { const int MAX_BUFFER = 255; CServerInfo& InfoScript = CServerInfo::GetInstance(); // ¼­¹ö Ä¿¸Çµå ½ÇÇà if(!InitializeCommand()) { ERRLOG0(g_Log, "Command lnit failed"); return false; } // ¼­¹ö ½ºÅ©¸³Æ® ÆÄÀÏ ·Îµå if(!InfoScript.Reload()) { ERRLOG0(g_Log, "ServerInfo file load failed"); return false; } // ¾ÆÀÌÅÛ ½ºÅ©¸³Æ® ÆÄÀÏ ·Îµå if(!Item::CItemMgr::GetInstance().LoadItemProtoType("./Script/Game/ItemScript.txt")) { ERRLOG0(g_Log, "ItemScript load failed"); return false; } // ½ºÅ³ ½ºÅ©¸³Æ® ·Îµå if(!CSkillMgr::GetInstance().LoadSkillsFromFile()) { ERRLOG0(g_Log, "SkillScript load failed"); return false; } // Äù½ºÆ® ¸Å´ÏÅÍ ÃʱâÈ­ if(!CQuestMgr::GetInstance().LoadQuestInfo()) { ERRLOG0(g_Log, "QuestScript load failed"); return false; } // »ç¿ëÀÚ Á¤ÀÇ À©µµ¿ì ¸Þ¼¼Áö µî·Ï if(!InitializeMsgProc()) { ERRLOG0(g_Log, "Window message registing failed"); } // AdminToolDB Á¢¼Ó if(!CDBAdminTool::GetInstance().ConnectAdminToolDB()) { ERRLOG0(g_Log, "Connecting failed: AdminTool DB"); return false; } // Listener »ý¼º if(!GetIOCPNet()->AddListener(m_lpClientSessionPolicy, 0, CServerSetup::P2AdminToolServerClientListen)) { ERRLOG0(g_Log, "Add listener failed"); return false; } // CAdminToolProcessThread ½ÃÀÛ¹× Thread°ü¸®ÀÚ¿¡ µî·Ï... if(!AddProcessThread(new CAdminToolProcessThread(*this))) { ERRLOG0(g_Log, "Add process thread failed"); return false; } // ÆÐŶ ±ÇÇÑ ¼³Á¤ InitializeAuthority(); // Áß°è¼­¹ö Å×À̺í ÃʱâÈ­ (°ú±Ý µðºñµµ Æ÷ÇÔµÈ Å×À̺í) CAgentServerTable::GetInstance().InitAgentServerTable(*GetIOCPNet()); return true; } void CRylAdminManagerServer::InitializeAuthority() { using namespace PktAdminMgr; // ±ÇÇÑ ¾øÀ½ AuthorityMask::AdminAuthority[PktCMD::PktLogin] = AuthorityMask::QUEST_MODE; AuthorityMask::AdminAuthority[PktCMD::PktLogUseMessage] = AuthorityMask::FREE_MODE; AuthorityMask::AdminAuthority[PktCMD::PktSetZoneList] = AuthorityMask::FREE_MODE; AuthorityMask::AdminAuthority[PktCMD::PktCloseCharacter] = AuthorityMask::FREE_MODE; // °³¹ßÀÚ AuthorityMask::AdminAuthority[PktCMD::PktItemDistribute] = AuthorityMask::DEVELOPER; // ¸¶½ºÅÍ AuthorityMask::AdminAuthority[PktCMD::PktNewAdmin] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER; // MASTER ±ÇÇÑ °èÁ¤ »ý¼ºÀº DEVELOPER ¸¸ °¡´É AuthorityMask::AdminAuthority[PktCMD::PktAdminList] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER; AuthorityMask::AdminAuthority[PktCMD::PktDelAdmin] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER; AuthorityMask::AdminAuthority[PktCMD::PktUpdateLevel] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER; AuthorityMask::AdminAuthority[PktCMD::PktUpdateIP] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER; AuthorityMask::AdminAuthority[PktCMD::PktUpdatePasswd] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER; AuthorityMask::AdminAuthority[PktCMD::PktGameAdmin] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER; AuthorityMask::AdminAuthority[PktCMD::PktLogList] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER; AuthorityMask::AdminAuthority[PktCMD::PktDetailLog] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER; AuthorityMask::AdminAuthority[PktCMD::PktBeforeAfter] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER; AuthorityMask::AdminAuthority[PktCMD::PktItemQtyControl] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER; // °ÔÀÓ ¸¶½ºÅÍ AuthorityMask::AdminAuthority[PktCMD::PktCheckName] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER | AuthorityMask::GM; AuthorityMask::AdminAuthority[PktCMD::PktChangeName] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER | AuthorityMask::GM; AuthorityMask::AdminAuthority[PktCMD::PktDelCharList] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER | AuthorityMask::GM; AuthorityMask::AdminAuthority[PktCMD::PktCharRestore] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER | AuthorityMask::GM; AuthorityMask::AdminAuthority[PktCMD::PktUpdateStatus] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER | AuthorityMask::GM; AuthorityMask::AdminAuthority[PktCMD::PktCreateItem] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER | AuthorityMask::GM; AuthorityMask::AdminAuthority[PktCMD::PktUpdateItem] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER | AuthorityMask::GM; AuthorityMask::AdminAuthority[PktCMD::PktRemoveItem] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER | AuthorityMask::GM; AuthorityMask::AdminAuthority[PktCMD::PktItemReset] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER | AuthorityMask::GM; AuthorityMask::AdminAuthority[PktCMD::PktInvenGold] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER | AuthorityMask::GM; AuthorityMask::AdminAuthority[PktCMD::PktSkillEdit] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER | AuthorityMask::GM; AuthorityMask::AdminAuthority[PktCMD::PktDepositPasswd] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER | AuthorityMask::GM; AuthorityMask::AdminAuthority[PktCMD::PktAdminStoreInsert] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER | AuthorityMask::GM; AuthorityMask::AdminAuthority[PktCMD::PktAdminStoreDelete] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER | AuthorityMask::GM; AuthorityMask::AdminAuthority[PktCMD::PktGetAdminStoreItem] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER | AuthorityMask::GM; AuthorityMask::AdminAuthority[PktCMD::PktUpdateAdminStore] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER | AuthorityMask::GM; AuthorityMask::AdminAuthority[PktCMD::PktDelCharacter] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER | AuthorityMask::GM; AuthorityMask::AdminAuthority[PktCMD::PktStoreGoldUpdate] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER | AuthorityMask::GM; AuthorityMask::AdminAuthority[PktCMD::PktDuplicatedItem] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER | AuthorityMask::GM; AuthorityMask::AdminAuthority[PktCMD::PktCancelExecuteQuest] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER | AuthorityMask::GM; AuthorityMask::AdminAuthority[PktCMD::PktDeleteHistoryQuest] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER | AuthorityMask::GM; AuthorityMask::AdminAuthority[PktCMD::PktGMLogMsg] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER | AuthorityMask::GM; AuthorityMask::AdminAuthority[PktCMD::PktGuildMemberEdit] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER | AuthorityMask::GM; // ¼­Æ÷ÅÍ AuthorityMask::AdminAuthority[PktCMD::PktSearchBlock] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER | AuthorityMask::GM | AuthorityMask::SUPPORTER; AuthorityMask::AdminAuthority[PktCMD::PktAddBlockUser] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER | AuthorityMask::GM | AuthorityMask::SUPPORTER; AuthorityMask::AdminAuthority[PktCMD::PktDelBlockUser] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER | AuthorityMask::GM | AuthorityMask::SUPPORTER; AuthorityMask::AdminAuthority[PktCMD::PktSearchID] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER | AuthorityMask::GM | AuthorityMask::SUPPORTER; AuthorityMask::AdminAuthority[PktCMD::PktSearchName] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER | AuthorityMask::GM | AuthorityMask::SUPPORTER; AuthorityMask::AdminAuthority[PktCMD::PktSetCharacter] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER | AuthorityMask::GM | AuthorityMask::SUPPORTER; AuthorityMask::AdminAuthority[PktCMD::PktGetCharacter] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER | AuthorityMask::GM | AuthorityMask::SUPPORTER; AuthorityMask::AdminAuthority[PktCMD::PktForcedDis] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER | AuthorityMask::GM | AuthorityMask::SUPPORTER; AuthorityMask::AdminAuthority[PktCMD::PktUserBillingLog] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER | AuthorityMask::GM | AuthorityMask::SUPPORTER; AuthorityMask::AdminAuthority[PktCMD::PktGuildSearch] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER | AuthorityMask::GM | AuthorityMask::SUPPORTER; AuthorityMask::AdminAuthority[PktCMD::PktGuildRight] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER | AuthorityMask::GM | AuthorityMask::SUPPORTER; AuthorityMask::AdminAuthority[PktCMD::PktRequestGuildMemberList] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER | AuthorityMask::GM | AuthorityMask::SUPPORTER; AuthorityMask::AdminAuthority[PktCMD::PktGuildRestoreDataList] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER | AuthorityMask::GM | AuthorityMask::SUPPORTER; AuthorityMask::AdminAuthority[PktCMD::PktFortSearch] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER | AuthorityMask::GM | AuthorityMask::SUPPORTER; AuthorityMask::AdminAuthority[PktCMD::PktMiningCamp] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER | AuthorityMask::GM | AuthorityMask::SUPPORTER; AuthorityMask::AdminAuthority[PktCMD::PktShopCamp] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER | AuthorityMask::GM | AuthorityMask::SUPPORTER; AuthorityMask::AdminAuthority[PktCMD::PktShopCampGold] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER | AuthorityMask::GM | AuthorityMask::SUPPORTER; AuthorityMask::AdminAuthority[PktCMD::PktShopCampTax] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER | AuthorityMask::GM | AuthorityMask::SUPPORTER; AuthorityMask::AdminAuthority[PktCMD::PktCastleSearch] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER | AuthorityMask::GM | AuthorityMask::SUPPORTER; AuthorityMask::AdminAuthority[PktCMD::PktCastleCreature] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER | AuthorityMask::GM | AuthorityMask::SUPPORTER; AuthorityMask::AdminAuthority[PktCMD::PktChangePos] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER | AuthorityMask::GM | AuthorityMask::SUPPORTER; AuthorityMask::AdminAuthority[PktCMD::PktConnectAllServerz] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER | AuthorityMask::GM | AuthorityMask::SUPPORTER; AuthorityMask::AdminAuthority[PktCMD::PktRefreshConnectedList] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER | AuthorityMask::GM | AuthorityMask::SUPPORTER; AuthorityMask::AdminAuthority[PktCMD::PktInterestedUser] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER | AuthorityMask::GM | AuthorityMask::SUPPORTER; AuthorityMask::AdminAuthority[PktCMD::PktConnectionChk] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER | AuthorityMask::GM | AuthorityMask::SUPPORTER; AuthorityMask::AdminAuthority[PktCMD::PktConnectedUserList] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER | AuthorityMask::GM | AuthorityMask::SUPPORTER; AuthorityMask::AdminAuthority[PktCMD::PktUnifiedCharInfo] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER | AuthorityMask::GM | AuthorityMask::SUPPORTER; AuthorityMask::AdminAuthority[PktCMD::PktUnifiedGuildInfo] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER | AuthorityMask::GM | AuthorityMask::SUPPORTER; AuthorityMask::AdminAuthority[PktCMD::PktDetailCharInfo] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER | AuthorityMask::GM | AuthorityMask::SUPPORTER; AuthorityMask::AdminAuthority[PktCMD::PktUserNation] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER | AuthorityMask::GM | AuthorityMask::SUPPORTER; AuthorityMask::AdminAuthority[PktCMD::PktShiftToUID] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER | AuthorityMask::GM | AuthorityMask::SUPPORTER; AuthorityMask::AdminAuthority[PktCMD::PktStoreTabEdit] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER | AuthorityMask::GM | AuthorityMask::SUPPORTER; AuthorityMask::AdminAuthority[PktCMD::PktAmountOfGold] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER | AuthorityMask::GM | AuthorityMask::SUPPORTER; AuthorityMask::AdminAuthority[PktCMD::PktNameChangeCount] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER | AuthorityMask::GM | AuthorityMask::SUPPORTER; AuthorityMask::AdminAuthority[PktCMD::PktGetCharInfoTime] |= AuthorityMask::DEVELOPER | AuthorityMask::MASTER | AuthorityMask::GM | AuthorityMask::SUPPORTER; } void CRylAdminManagerServer::PrintServerInfo() { char szServInfo[4096]; CAgentServerTable& ServerTable = CAgentServerTable::GetInstance(); ServerTable.PrintServerState(szServInfo, sizeof(szServInfo)); PrintInfo(szServInfo, sizeof(szServInfo)); } bool CRylAdminManagerServer::InitializeCommand() { CConsoleCMDFactory& CMDFactory = *GetCommandFactory(); if(!CMDFactory.AddCommand("flush", new CCMDFlush)) { ERRLOG0(g_Log, "Command failed : flush"); return false; } if(!CMDFactory.AddCommand("connect_all", new CCMDConnectAll)) { ERRLOG0(g_Log, "Command failed : connect_all"); return false; } if(!CMDFactory.AddCommand("reload_script", new CCMDReload)) { ERRLOG0(g_Log, "Command failed : reload"); return false; } if(!CMDFactory.AddCommand("connect_index", new CCMDConnect)) { ERRLOG0(g_Log, "Command failed : connect"); return false; } return true; }