DragonNest/Server/ServiceManager/DataManager.h

481 lines
10 KiB
C
Raw Normal View History

2024-12-19 09:48:26 +08:00
#pragma once
enum eURLType
{
_URLTYPE_STRUCTINFO,
_URLTYPE_RESOURCE,
_URLTYPE_EXE,
//_URLTYPE_PARTIAL_RESOURCE,
};
struct TURLInfo
{
int nType;
TCHAR szInfo[256];
};
struct TFtpInfo
{
TCHAR szIP[IPLENMAX];
unsigned short nPort;
TCHAR szID[IDLENMAX];
TCHAR szPass[PASSWORDLENMAX];
std::vector <TURLInfo> URLList;
};
struct TPartitionInfo
{
TCHAR szPartitionName[256];
int nPID;
};
struct TMonitorUserData
{
char szUserName[NAMELENMAX];
char szPassWord[PASSWORDLENMAX];
int nMonitorLevel; //eServerMonitorLevel
bool bDuplicateLogin; //<2F>ߺ<EFBFBD><DFBA>α<EFBFBD><CEB1>ΰ<EFBFBD><CEB0><EFBFBD>
};
//<2F><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> xml<6D><6C><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ε常 <20>ϴ<EFBFBD> <20><><EFBFBD><EFBFBD>ü <20>̰<EFBFBD><CCB0><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ÿ<EFBFBD><C5B8> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ϰ<EFBFBD> <20>ȴ<EFBFBD>.
struct TStructSocketMax
{
int nSocketMax; //Client Accept<70><74> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ǯ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void InitSocketMax()
{
nSocketMax = 3000;
}
};
struct TDolbyAxon
{
int nDolbyWorldID;
WCHAR wszPrivateDolbyIP[IPLENMAX];
WCHAR wszPublicDolbyIP[IPLENMAX];
int nDolbyAPort;
int nDolbyCPort;
TDolbyAxon()
{
nDolbyWorldID = 0;
memset(wszPrivateDolbyIP, 0, sizeof(wszPrivateDolbyIP));
memset(wszPublicDolbyIP, 0, sizeof(wszPublicDolbyIP));
nDolbyAPort = 0;
nDolbyCPort = 0;
}
};
struct TStructDolbyAxon
{
std::vector <TDolbyAxon> vDolbyAxonInfo;
void InitDolbyAxon()
{
vDolbyAxonInfo.clear();
}
};
struct TStructDBMiddleWare
{
int nDBMiddleWareAcceptPort; //<2F><><EFBFBD><EFBFBD><EFBFBD>̵<EFBFBD><CCB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)<29><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE>Ʈ
void InitDBMiddleWare()
{
nDBMiddleWareAcceptPort = 0;
}
};
struct TStructLogServer
{
int nLogServerAcceptPort; //<2F>α<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE>Ʈ
void InitLogServer()
{
nLogServerAcceptPort = 0;
}
};
struct TStructLoginServer
{
int nLoginMasterAcceptPort; //<2F>α<EFBFBD><CEB1><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE>Ʈ
int nLoginClientAcceptPort; //<2F>α<EFBFBD><CEB1><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ŭ<><C5AC><EFBFBD>̾<EFBFBD>Ʈ <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE>Ʈ
void InitLoginServer()
{
nLoginClientAcceptPort = 0;
nLoginMasterAcceptPort = 0;
}
};
struct TStructMasterServer
{
int nMasterVillageAcceptPort; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE>Ʈ
int nMasterGameAcceptPort; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE>Ʈ
void InitMasterServer()
{
nMasterGameAcceptPort = 0;
nMasterVillageAcceptPort = 0;
}
};
struct TStructVillageServer
{
int nVillageID; //<2F><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE><EFBFBD><EFBFBD> <20><><EFBFBD>õ<EFBFBD><C3B5><EFBFBD> <20>ʴ´<CAB4>.
int nVillageClientAcceptPort; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ŭ<><C5AC><EFBFBD>̾<EFBFBD>Ʈ <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE>Ʈ
int nCombineWorld;
void InitVillageServer()
{
nVillageID = 0;
nVillageClientAcceptPort = 0;
nCombineWorld = 0;
}
};
struct TStructGameServer
{
bool bPreLoad; //<2F><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD>.
int nGameClientAcceptUDPPort; //<2F><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ŭ<><C5AC><EFBFBD>̾<EFBFBD>Ʈ UDP<44><50><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE>Ʈ
int nGameClientAcceptTCPPort; //<2F><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ŭ<><C5AC><EFBFBD>̾<EFBFBD>Ʈ TCP<43><50><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE>Ʈ
int nGameAffinityType; //<2F><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD>̺긮<CCBA><EAB8AE>
bool bGameWorldCombine; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>հ<EFBFBD><D5B0>ӷ<EFBFBD>
void InitGameServer()
{
bPreLoad = true;
nGameClientAcceptTCPPort = 0;
nGameClientAcceptUDPPort = 0;
nGameAffinityType = 1;
bGameWorldCombine = false;
}
};
struct TStructCashServer
{
int nCashAcceptPort; //ij<>ü<EFBFBD><C3BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE>Ʈ
void InitCashServer()
{
nCashAcceptPort = 0;
}
};
struct TDefaultServerInfo : public TStructSocketMax,
TStructDBMiddleWare,
TStructLogServer,
TStructLoginServer,
TStructMasterServer,
TStructVillageServer,
TStructGameServer,
TStructCashServer,
TStructDolbyAxon
{
TDefaultServerInfo::TDefaultServerInfo()
{
Init();
}
void Init()
{
InitSocketMax();
InitDBMiddleWare();
InitLogServer();
InitLoginServer();
InitMasterServer();
InitVillageServer();
InitGameServer();
InitCashServer();
InitDolbyAxon();
}
};
struct TSQLConnectionInfo
{
int nPort;
WCHAR wszIP[IPLENMAX];
WCHAR wszDBID[IDLENMAX];
WCHAR wszDBName[DBNAMELENMAX];
};
struct TDoorsConnectionInfo
{
int nPort;
WCHAR wszIP[IPLENMAX];
};
struct TDefaultDatabaseInfo
{
TSQLConnectionInfo MemberShipDB; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؼ<EFBFBD><D8BC><EFBFBD> <20>ϳ<EFBFBD><CFB3>̴<EFBFBD>.
TSQLConnectionInfo ServerLogDB; //<2F>α׵<CEB1><D7B5><EFBFBD><EFBFBD><EFBFBD> <20>ϳ<EFBFBD><CFB3><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
std::map <int, TSQLConnectionInfo> WorldDB; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؼ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>´<EFBFBD>. first key = worldid
void Init()
{
memset(&MemberShipDB, 0, sizeof(TSQLConnectionInfo));
memset(&ServerLogDB, 0, sizeof(TSQLConnectionInfo));
WorldDB.clear();
}
};
struct TSIDBaseConnectionInfo
{
int nType;
int nSID;
};
struct TDefaultServerConstructData
{
int nSID;
WCHAR wszType[16];
int nServerType;
int nAssignedLauncher;
WCHAR wszExcutePath[MAX_PATH];
WCHAR wszExcuteFile[EXCUTELENMAX];
int nForServerType; //sid base dbconnection<6F><6E> <20>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int nServerNo; //<2F><><EFBFBD><EFBFBD><EFBFBD>ѹ<EFBFBD><>ÿ<EFBFBD> : Ÿ <20><><EFBFBD><EFBFBD> <20>ʿ<EFBFBD><CABF><EFBFBD> Ȯ<><EFBFBD><E5B0A1>)
std::vector <int> nWorldIDList;
std::vector <TSIDBaseConnectionInfo> SIDConnectionList;
};
struct TDBMiddleWareConstructData : public TDefaultServerConstructData, TStructDBMiddleWare
{
TDBMiddleWareConstructData()
{
InitDBMiddleWare();
}
};
struct TLoginServerConstructData : public TDefaultServerConstructData, TStructLoginServer, TStructSocketMax
{
TLoginServerConstructData()
{
InitSocketMax();
InitLoginServer();
}
};
struct TMasterServerConstructData : public TDefaultServerConstructData, TStructMasterServer, TStructSocketMax
{
TMasterServerConstructData()
{
InitSocketMax();
InitMasterServer();
}
};
struct TGameServerConstructData : public TDefaultServerConstructData, TStructGameServer, TStructSocketMax
{
TGameServerConstructData()
{
InitSocketMax();
InitGameServer();
}
};
struct TVillageServerConstructData : public TDefaultServerConstructData, TStructVillageServer, TStructSocketMax
{
TVillageServerConstructData()
{
InitSocketMax();
InitVillageServer();
}
};
struct TLogServerConstructData : public TDefaultServerConstructData, TStructLogServer
{
TLogServerConstructData()
{
InitLogServer();
}
};
struct TCashServerConstructData : public TDefaultServerConstructData, TStructCashServer
{
TCashServerConstructData()
{
InitCashServer();
}
};
struct TPreServerStructData
{
std::map <int, TDefaultServerConstructData*> PreStructList;
};
struct TServerExcuteData
{
int nSID; //<2F><><EFBFBD><EFBFBD><EFBFBD>Ǵ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȣ
WCHAR wszType[8];
int nPatchType;
int nServerType;
int nAssignedLauncherID;
int nCreateCount;
int nCreateIndex;
std::wstring wstrExcuteData;
TServerExcuteData()
{
nSID = 0;
memset(wszType, 0, sizeof(wszType));
nServerType = 0;
nAssignedLauncherID = 0;
nCreateCount = 0;
nCreateIndex = 0;
nPatchType = -1;
}
};
struct TNetLauncher
{
int nWID; //<2F><><EFBFBD>ӵǴ<D3B5> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>
int nPID; //<2F><><EFBFBD>ӵǴ<D3B5> <20><>Ƽ<EFBFBD><C6BC> <20><><EFBFBD>̵<EFBFBD>
int nID;
TCHAR szIP[IPLENMAX];
WCHAR wszPublicIP[IPLENMAX];
unsigned long nIP;
std::vector <TServerExcuteData*> ExcuteList;
};
struct tMonitorChannelInfo
{
int nWorldID;
int nManagedID;
sChannelInfo Info;
};
//for convert
struct TNetExcuteCommand
{
int nSID; //<2F><><EFBFBD><EFBFBD><EFBFBD>Ǵ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȣ
TCHAR szType[8];
char cType;
int nAssignedLauncherID;
WCHAR szExcuteFile[EXCUTELENMAX];
WCHAR szCmd[EXCUTECMDMAX];
std::vector <std::pair<int, std::wstring>> strConList;
int nWorldID;
int nFor;
int nVillageID;
//for dbserver
std::vector <std::pair<int, int>> vAssignedTypeList;
int nAssingedType;
TNetExcuteCommand()
{
nSID = 0;
memset(szType, 0, sizeof(szType));
cType = 0;
nAssignedLauncherID = 0;
memset(szExcuteFile, 0, sizeof(szExcuteFile));
memset(szCmd, 0, sizeof(szCmd));
nWorldID = 0;
nFor = MANAGED_TYPE_NONE;
nAssingedType = 0;
nVillageID = 0;
}
};
struct TWorldConnectionInfo
{
int nWorldID;
int nVillagePort;
int nGamePort;
WCHAR wszIP[IPLENMAX];
};
#include "DNDataManagerBase.h"
class CDataManager : public CDNDataManagerBase
{
public:
CDataManager();
~CDataManager();
static CDataManager * GetInstance();
bool LoadUser();
bool LoadStruct();
bool ConvertStruct();
bool LoadServerConstructData();
bool SaveUser();
int ChangeUserPassword(TChangePassword* pData);
int VerifyNetLauncher(unsigned long nIP);
int GetLauncherCount() { return (int)m_NetLauncherList.size(); }
const TCHAR * GetIP() { return m_szServiceIP; }
const TNetLauncher * GetLauncherInfo(unsigned int nIP);
const TNetLauncher * GetLauncherInfobyID(int nNID);
bool IsNeedOtherExcutePath(int nID);
int GetLauncherCnt() { return (int)m_NetLauncherList.size(); }
void SetLauncherPublicIP(int nID, char* szPublicIP);
void GetLauncherIds(std::vector <TNetLauncherInfo> * pList);
void GetLauncherIds(std::map <int, TNetLauncherInfo> * pList);
void GetAssingedPatchTypeList(int nID, std::list <char> * pList);
int GetAssignedCreateLastIndex(int nID, const TCHAR * pType);
void SetAssignedCreateCount(int nID, const TCHAR * pType, int nCreateCount);
void GetCommandList(std::vector <int> * pvList);
void GetCommandListByPID(int nPID, std::vector <int> * pvList);
void GetExeCommandList(int nNID, std::vector <TServerExcuteData> * pvList);
const TServerExcuteData * GetCommand(int nSID);
//
bool CheckMonitorUser(const char * pName, const char * pPass, int &nLevel, bool &bCanDuplicate);
inline WCHAR* GetDoorsIP(void){ return m_DoorsInfo.wszIP; }
inline int GetDoorsPort(void){ return m_DoorsInfo.nPort; }
#if defined (_SERVICEMANAGER_EX)
public:
void GetPartitionList(OUT vector<const TPartitionInfo*>& list) const;
void GetWorldList(OUT vector<const TServerInfo*>& list) const;
void GetLauncherList(OUT vector<const TNetLauncher*>& list) const;
void GetPartitionText(OUT wchar_t text[256]) const;
const TDefaultServerInfo& GetDefaultServerInfo() const { return m_DefaultServerConstructInfo; }
const TDefaultDatabaseInfo& GetDefaultDatabaseInfo() const { return m_DefaultSQLData; }
#endif // #if defined (_SERVICEMANAGER_EX)
bool IsFirstGameCon(int nSID);
private:
map <unsigned long, TNetLauncher*> m_NetLauncherList;
map <int, TPartitionInfo*> m_PartitionList;
vector <TMonitorUserData> m_MonitorUserData;
TDefaultServerInfo m_DefaultServerConstructInfo;
TDefaultDatabaseInfo m_DefaultSQLData;
TPreServerStructData m_PreServerStructData;
vector <int> m_vWorldList;
TDoorsConnectionInfo m_DoorsInfo;
map <int, TServerExcuteData> m_ServerExcuteData;
bool ConstructServerStruct();
void ClearPreConstructData();
void GetServerCountFromPreconstruct(int nWorldID, int nType, vector <const TDefaultServerConstructData*> &vConstDatalist);
int GetAssingedUserCount(int nWorldID, int nVillageID);
void MakeWord(const TDefaultServerConstructData * pConstruct, wstring &wstrMark, int nCreateIndex, int nCreateCount);
void MakeDBConInfo(const TSQLConnectionInfo * pInfo, wstring &wstrOut);
void MakeWorldDBConInfo(vector <int> &vWorldIDs, wstring &wstrOut);
bool MakeConInfo(int nType, int nSID, wstring &wstr, bool bCalledGame = false, vector <int> * pvWorldID = NULL);
void MakeDolbyInfo(int nWorldID, wstring &wstr);
bool MakeFirstGameCon(wstring &wstr, int &nFarmServerID);
TCHAR m_szServiceIP[IPLENMAX];
USHORT m_nServicePort;
void ClearData();
void ClearUserData();
void CheckChannelInfo() const;
};