Files
mir_server/server/DBServer/DBDataClientHandler.h

162 lines
4.9 KiB
C
Raw Normal View History

2025-01-09 17:45:40 +08:00
#ifndef DB_DATA_CLIENT_HANDLER_H__
#define DB_DATA_CLIENT_HANDLER_H__
/*
DBClient逻辑处理类()DB请求
DBClient将通信线程和DB请求逻辑处理和在一起DB操作比较频繁DB查询压力大DB
DBClient数据处理不过来导致逻辑服那边堆
DB请求数据包也越来越多
DBClient的数据接收和处理逻辑分开线
*/
class CDBDataClientHandler :
public wylib::thread::CBaseThread,
public CSendPacketPool
{
public:
friend class CDBDataCache;
// ctor and dtor
CDBDataClientHandler();
~CDBDataClientHandler();
/*
* Comments:
* @Param ILogicDBRequestHost* pHost:
* @Param CSQLConenction *lpSQLConnection:
* @Return bool: truefalse
* @Remark: 线线
*/
bool Start(ILogicDBRequestHost* pHost, CSQLConenction *lpSQLConnection);
/*
* Comments:
* @Return bool:
* @Remark:
*/
bool Stop();
/*
* Comments: DB请求的消息
* Param jxSrvDef::INTERSRVCMD nCmd: Id
* Param CDataPacketReader & packet:
* @Return void:
* @Remark: DB请求数据添加到队列中线
*/
void AddMessage(jxSrvDef::INTERSRVCMD nCmd, CDataPacketReader& packet);
CLogicDBReqestHandler& GetDBRequestHandler() { return m_LogicDBReqHandler; }
//追踪内存使用情况
void Trace();
protected:
/*
* Comments:
* Param BOOL flag:
* @Return void:
* @Remark: flag设置为truefalse
*/
inline void SetReadOpFlag(BOOL flag)
{
InterlockedExchange(&m_bHasReadOp, flag);
}
/*
* Comments:
* @Return bool: truefalse
* @Remark:
*/
BOOL HasReadOPFlag() const { return m_bHasReadOp; }
/*
* Comments:
* Param jxSrvDef::INTERSRVCMD nCmd:
* @Return bool:
* @Remark:
*/
bool IsReadCmd(jxSrvDef::INTERSRVCMD nCmd);
/*
* Comments: 线
* @Return void:
* @Remark:
*/
virtual void OnRountine();
/*
* Comments: 线
* @Return void:
* @Remark:
*/
void ThreadLogicProc();
/*
* Comments: DB请求逻辑处理
* @Return void:
* @Remark: DB请求列表并且处理ActorCache数据里头SQL查询
*/
void RunOne();
/*
* Comments:
* @Return void:
* @Remark:
*/
CDataPacket* AllocPacket();
/*
* Comments:
* Param CDataPacket * packet:
* @Return void:
* @Remark:
*/
void FreePacket(CDataPacket* packet);
/*
* Comments:
* Param CQueueList<CDataPacket * > & pkgList:
* @Return void:
* @Remark:
*/
void DestroyPacketList(CQueueList<CDataPacket*>& pkgList);
/*
* Comments: DB请求消息
* Param jxSrvDef::INTERSRVCMD nCmd:
* Param CDataPacket & packet:
* @Return void:
* @Remark:
*/
void HandleDBMessage(jxSrvDef::INTERSRVCMD nCmd, CDataPacket &packet);
private:
CQueueList<CDataPacket*> m_sMsgList; // DB请求消息列表格式消息ID+消息参数)。
CCSLock m_sMsgListLock;
CQueueList<CDataPacket*> m_sFreeList; // 自由消息数据包
CCSLock m_sFreeListLock;
//CBufferAllocator m_allocator; // BuffAllocator用于DataPacket的内存分配
CDBDataCache m_sActorCacheData; // 角色DB存盘Cache数据
volatile long m_bHasReadOp; // 当前是否有读DB操作
volatile long m_lStop; // 线程停止标记
volatile long m_lHasStart; //是否已经启动
volatile long m_lLogicIsRunning; //逻辑线程是否已经启动
ILogicDBRequestHost* m_pHost; //
CCSLock m_sStartLock; // 线程开始启动锁
#ifdef WIN32
HANDLE m_hStartEvent; //启动信号事件
HANDLE m_hStopEvent; //停止信号事件
#else
sem_t m_hStartEvent; //启动信号事件
sem_t m_hStopEvent; //停止信号事件
#endif
CLogicDBReqestHandler m_LogicDBReqHandler; // DB请求处理
static int s_nDBHandleSleep; // DB逻辑处理睡眠时间
TICKCOUNT m_memoryTimer; //定时器
};
#endif // _DB_DATA_CLIENT_HANDLER_H__