Files
mir_server/server/DBServer/DBServer.h
aixianling 5c9f1dae4a init
2025-01-09 17:45:40 +08:00

207 lines
7.4 KiB
C++
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#ifndef _DBENGINE_H_
#define _DBENGINE_H_
#include "CFilter.h"
class CDBGateManager;
class CDBSessionClient;
class LogSender;
class CNameSyncClient;
class CDBDataServer;
class CDBCenterClient;
class CEsqlManager;
class CDBServer
{
public:
CDBServer();
~CDBServer();
inline LPCSTR getServerName(){ return m_sServerName; };
//inline CDBGateManager* getGateManager(){ return m_pGateManager; };
//inline CDBSessionClient* getSessionClient(){ return m_pSSClient; };
//inline LogSender* getLogClient(){ return m_pLogClient; };
inline CNameSyncClient* getNameSyncClient(){ return m_pNameSyncClient; }
//inline CDBCenterClient* getDBCenterClient() { return m_pDBCenterClient; }
inline CDBDataServer* getDataServer(){ return m_pDataServer; }
inline BOOL getSelectCountryEnabledOnCreateFirstChar(){ return m_boFirstCharEnableSelCountry; }
inline INT getServerIndex() { return m_nServerIndex;}
BOOL getGameReady(int nSrvIdx);
//配置数据库连接对象
VOID SetupSQLConnection(CSQLConenction *lpConnection);
//将名称字符串中首个字符之后的字母全部转换为小写
LPCSTR LowerCaseNameStr(LPSTR sNameStr,INT_PTR nSize);
//加载游戏网关路由表,返回-1表示发生错误否则表示加载的路由信息数量
INT LoadGameServerRoute();
// 输出游戏路由信息
void TraceGameServerRoute();
//为网关用户选择角色网关路由地址选择路由地址成功则返回TRUE并将地址保存在lpGateHost中会添加终止字符将端口保存在lpGatePort中
BOOL SelectGameServerRoute(const int nServerIndex, LPSTR lpGateHost, const SIZE_T dwHostLen, PINT_PTR lpGatePort);
//获取会话数据
inline BOOL GetSessionData(const int nSessionId, OUT jxSrvDef::PGLOBALSESSIONOPENDATA pSessionData)
{
//return m_pSSClient->GetSessionData(nSessionId, pSessionData);
return FALSE;
}
//依据会话ID关闭连接到网关中的用户
inline VOID PostCloseGateUserBySessionId(const int nSessionId)
{
//m_pGateManager->PostCloseGateUserByGlobalSessionId(nSessionId);
}
//异步检查网关中是否存在会话为特定值的用户
inline VOID PostQueryUserExistsBySessionId(const int nSessionId)
{
//m_pGateManager->PostQueryGateUserExistsBySessionId(nSessionId);
}
//网关向DBSSClient返回对用户是否存在的查询的消息
inline VOID PostQueryUserExistsBySessionIdResult(const int nSessionId, const BOOL boExists)
{
//m_pSSClient->PostQuerySessionExistsResult(nSessionId, boExists);
}
//网关向DBSSClient投递改变会话状态的消息
inline VOID PostChangeSessionState(const int nSessionId, const jxSrvDef::GSSTATE nState)
{
//m_pSSClient->PostChangeSessionState(nSessionId, nState);
}
//当网关用户关闭的时候,向会话模块投递用户关闭的消息,以便决定是否应该删除会话
inline VOID PostSSClientUserClosed(const int nSessionId)
{
//m_pSSClient->PostCloseSession(nSessionId);
}
//向特定的数据服务器投递打开角色加载认证数据
inline VOID PostDBServerOpenCharLoad(const int nServerIndex, UINT64 nSessionId, UINT64 nCharId,UINT64 nCurrentTick)
{
m_pDataServer->PostOpenCharLoad(nServerIndex, nSessionId, nCharId,nCurrentTick);
}
//设置服务器名称
VOID SetServerName(LPCSTR sSrvName);
//设置网关服务的地址和端口
VOID SetGateServiceAddress(LPCTSTR sHost, const INT_PTR nBindPort);
//设置会话服务器地址和端口,设置会在会话客户端下次连接的时候生效
VOID SetSessionServerAddress(LPCTSTR sHost, const INT_PTR nPort);
//设置日志服务器地址和端口
VOID SetLogServerAddress(LPCTSTR sHost, const INT_PTR nPort);
// 设置DBCenter服务器地址和断开
VOID SetDBCenterAddress(LPCTSTR sHost, const INT_PTR nPort);
//设置数据库连接配置
VOID SetSQLConfig(LPCSTR sHost, const INT_PTR nPort, LPCSTR sDBName, LPCSTR sDBUser, LPCSTR sUserPassword, bool boUtf8);
//设置是否允许在创建第一个角色的时候选择国家
VOID SetSelectCountryEnabledOnCreateFirstChar(const BOOL boEnabled);
//设置名称服务器地址和端口,设置会在名称客户端下次连接的时候生效
VOID SetNameSyncServerAddress(LPCTSTR sHost, const INT_PTR nPort);
//设置数据服务的绑定地址和端口
VOID SetDataServiceAddress(LPCTSTR sBindHost, const INT_PTR nBindPort);
VOID SetServerIndex(INT nServerIndex);
//启动数据服务器的服务
BOOL Startup();
//停止数据服务器的服务
VOID Shutdown();
//读入关键字敏感词
BOOL LoadFilterNames();
//增加关键字敏感词
void AddFilterName(char* sName);
//获取utf8格式的字符串的长度1个汉字和1个英文字符都是1
static INT_PTR GetStrLenUtf8(LPCTSTR sName);
void CheckNameFilter();
//检查名字里是否有敏感词如果有返回false
BOOL CheckNameStr(LPCSTR sNameStr);
/*
* Comments:加载文件
* Param LPCSTR sPrifixList:
* Param LPCSTR sConnectList:
* Param LPCSTR sStuffixList:
* @Return bool:
*/
bool LoadNameGroup(LPCSTR sPrifixList, /*LPCSTR sConnectList,*/ LPCSTR sStuffixList);
//获取一个随机生成的名字
INT_PTR GetRandomName(LPCTSTR& sName,INT_PTR nSex);
bool GetRandomGroupName(char * sName, int nSize);
//判断名称字符串中是否含有非法字符
bool hasFilterWordsInclude(LPCSTR sNameStr);
// 更新逻辑网关用户信息
void UpdateLogicGateUserInfo(CDataPacketReader& packet);
//设置数据服务器启动标志
void SetDbStartFlag(bool bFlag) {m_bStartDbServer = bFlag;}
//返回数据服务器关闭的标志
bool GetDbStartFlag() {return m_bStartDbServer;}
//运行esql文件
void RunEsqlFile(char* sToolPath,char* sDbName);
//追踪内存使用情况
void Trace();
bool IsUtf8()
{
return m_boUtf8;
}
private:
//释放游戏网关路由数据
VOID FreeGameServerRoute();
INT_PTR SelecteGameGateRouteIndex(jxSrvDef::PGAMESERVERROUTE pRoute);
private:
CHAR m_sServerName[128]; //服务器名称
CHAR m_sSQLHost[128]; //数据库地址
INT_PTR m_nSQLPort; //数据库端口
CHAR m_sSQLDBName[128]; //数据库名称
CHAR m_sSQLUser[128]; //数据库用户名
CHAR m_sSQLPassword[128]; //数据库用户密码
TCHAR m_sNameSyncServerHost[128]; //名称服务器地址(如果地址不为空字符串则通过名称服务器申请角色和帮会ID)
INT_PTR m_nNameSyncServerPort; //名称服务器端口
BOOL m_boFirstCharEnableSelCountry;//账号创建第一个角色时是否允许选择国家默认值为FALSE
bool m_boUtf8; //使用utf8数据编码
CFilter m_filter; //
//CDBGateManager *m_pGateManager; //网关管理器
//CDBSessionClient *m_pSSClient; //会话客户端
CNameSyncClient *m_pNameSyncClient; //名称客户端
CDBDataServer *m_pDataServer; //数据服务器
//LogSender *m_pLogClient; //日志客户端
//CDBCenterClient *m_pDBCenterClient; // DBCenter客户端
CCSLock m_GameServerRouteListLock;//游戏网关路由表锁
CLockList<jxSrvDef::PGAMESERVERROUTE> m_GameServerRouteList;//游戏网关路由表
CEsqlManager m_pEsqlMgr; //运行esql文件
// zac
int m_nServerIndex;
//PFT_MBCS_CHAR m_pFilterWords; //屏蔽词列表
CCSLock m_NameFilterLock;
CCSLock m_RandNameLock;
CLoadString * m_pListPrefix;
//CLoadString * m_pListConnect;
CLoadString * m_pListStuffix;
bool m_bStartDbServer;
public:
static CDBServer *s_pDBEngine;
};
inline CDBServer* GetGlobalDBEngine()
{
return CDBServer::s_pDBEngine;
}
#endif