Files
mir_server/server/DBServer/LogicDBRequestHandler.h

400 lines
18 KiB
C
Raw Normal View History

2025-01-09 17:45:40 +08:00
#ifndef LOGIC_DB_REQUEST_HANDLER_H_
#define LOGIC_DB_REQUEST_HANDLER_H_
struct CUserItem;
struct tagOneSkillDbData;
/*
DB请求处理类
*/
// Forward Declaration
class CSQLConenction;
class ILogicDBRequestHost;
class CLogicDBReqestHandler
{
public:
CLogicDBReqestHandler();
~CLogicDBReqestHandler();
public:
inline void SetSQLConnection(CSQLConenction *pSQLConn) { m_pSQLConnection = pSQLConn; }
inline CSQLConenction* GetSqlConnection() {return m_pSQLConnection;}
inline void SetRequestHost(ILogicDBRequestHost *pHost) { m_pHost = pHost; }
//追踪内存使用情况
void Trace ();
///*
//* Comments: 获取连接对端的ServerId
//* @Return int:
//* @Remark:
//*/
//int getClientServerIndex();
//////////////////////////////////////////////////////////////////////////
// 杂DB请求处理
//////////////////////////////////////////////////////////////////////////
void ExecuInitDb(CDataPacketReader &inPacket);
void OnResponseDbSessionData(CDataPacketReader &inPacket);
void UpdateLogicGateUserInfo(CDataPacketReader &inPacket);
void LogicSendStopDbServerCmd(CDataPacketReader &inPacket);
void OnReloadCrossConfig(CDataPacketReader &inPacket);
//////////////////////////////////////////////////////////////////////////
// 角色基本数据相关的DB请求处理
//////////////////////////////////////////////////////////////////////////
void SaveActorCustomInfo(CDataPacketReader& inPacket);//保存自定义数据
void QueryActorCustomInfo(CDataPacketReader& inPacket);//查询自定义数据
void QueryActorCustomInfoUnForbid(CDataPacketReader& inPacket);
void SaveActorCustomInfoUnForbid(CDataPacketReader& inPacket);//保存自定义数据
void QueryActorCustomInfoCustomTitleId(CDataPacketReader& inPacket);
void SaveActorCustomInfoCustomTitleId(CDataPacketReader& inPacket);//保存自定义数据
unsigned int QueryActorFromDB(CDataPacketReader &inPacket);
void QueryActoSubSystemData(CDataPacketReader &inPacket);
void SaveOfflineActorProperty(CDataPacketReader& inPacket);
void QueryOfflineUserInfo(CDataPacketReader &inPacket);
void QueryOfflineUserHeroInfo(CDataPacketReader &inPacket);
void SaveActorToDB(CDataPacketReader &inPacket, bool bResp = true);
void UpdateChallengeData(CDataPacketReader &inPacket);
void QueryActorExists(CDataPacketReader & inPacket);
void UpdateCharStatus(CDataPacketReader & inPacket);
void UpdateCharOnlineStatus(unsigned int nActorId, int nStatus);
void ChangeActorTradingQuota(CDataPacketReader & inPacket);// 修改玩家交易额度
//计数器
void LoadCircleCount();
void LoadActorStaticCounts(unsigned int nActorId, unsigned int nRawServerId, unsigned int nLoginServerId);
void SaveActorStaticCounts(CDataPacketReader& packet);
//强化
void QueryStrengthenImpl(MYSQL_ROW pRow, CDataPacket& OutPacket);
void LoadActorStrengthenInfo( unsigned int nActorID,unsigned int nRawServerId,unsigned int nLoginServerId);
void SaveActorStrengthenInfo(CDataPacketReader& packet);
//圣物dcSaveHallowsSystemInfo
void SaveHallowsSystemInfo(CDataPacketReader& packet);
void LoadHallowsSystemInfo(CDataPacketReader& packet);
//复活特权
void LoadReviveDurationSystemInfo(CDataPacketReader& packet);
void SaveReviveDurationSystemInfo(CDataPacketReader& packet);
//宠物
void QueryLootPetData(unsigned int nActorId, unsigned int nRawServerId, unsigned int nLoginServerId);
void SaveLootPetToDB(CDataPacketReader& packet, bool bResp = true);
//返利活动
void QueryRebateData(CDataPacketReader& packet);
void QueryNextDayRebateData(CDataPacketReader& packet);
void UpdateRebateData(CDataPacketReader& packet);
void SaveRebateToDB(CDataPacketReader& packet);
void ClearRebateData(CDataPacketReader& packet);
//跨服
void LoadCrossGuildId(CDataPacketReader& packet);
//成就
void LoadActorAchieveMentInfo(unsigned int nActorId, unsigned int nRawServerId, unsigned int nLoginServerId);
void SaveActorAchieveMentInfo(CDataPacketReader& packet);
void LoadOfflineAchieveMentInfo(CDataPacketReader& packet);
void SaveOfflineAchieveMentInfo(CDataPacketReader& packet);
void SaveActorGhost(CDataPacketReader& packet);
void LoadActorGhost(CDataPacketReader& packet);
//////////////////////////////////////////////////////////////////////////
// 背包物品以及活动背包相关的DB请求处理
//////////////////////////////////////////////////////////////////////////
void QueryItemsImpl(MYSQL_ROW pRow, CUserItem& data);
void QueryItems(unsigned int nActorID, unsigned int nItemStoreType, int nRawServerId, int nLoginServerId);
void SaveItems(CDataPacketReader &inPacket, bool bResp = true);
void LoadUserActiveItem(CDataPacketReader &inPacket);
void GetUserActiveItem(CDataPacketReader &inPacket);
void RemoveUserActiveItem(CDataPacketReader &inPacket);
//衣橱系统保存
void SaveAlmirahItem(CDataPacketReader & inPacket, bool bResp = true);
void LoadAlmirahItem(unsigned int nActorId, int nRawServerId, int nLoginServerId);
//////////////////////////////////////////////////////////////////////////
// 游戏设置相关的db 请求处理
//////////////////////////////////////////////////////////////////////////
void QueryOtherGameSetsFromDB(unsigned int nActorID, int nRawServerId, int nLoginServerId);
void SaveOtherGameSetsToDB(CDataPacketReader &inPacket, bool bResp = true);
//////////////////////////////////////////////////////////////////////////
// 技能相关的DB请求处理
//////////////////////////////////////////////////////////////////////////
void QuerySkillImpl(MYSQL_ROW pRow, tagOneSkillDbData& data);
void QuerySkillFromDB(unsigned int nActorID, int nRawServerId, int nLoginServerId);
void SaveSkillToDB(CDataPacketReader &inPacket, bool bResp = true);
//////////////////////////////////////////////////////////////////////////
// 任务相关的DB请求处理
//////////////////////////////////////////////////////////////////////////
void QueryQuestFromDB(CDataPacketReader &inPacket);
void SaveQuestToDB(CDataPacketReader &inPacket, bool bResp = true);
//////////////////////////////////////////////////////////////////////////
// 脚本数据相关的DB请求处理
//////////////////////////////////////////////////////////////////////////
void QueryActorScriptData(CDataPacketReader &inPacket);
void QueryActorScriptData(unsigned int nActorId, int nRawServerId, int nLoginServerId);
void SaveScriptDataToDB(CDataPacketReader &inPacket, bool bResp = true);
//////////////////////////////////////////////////////////////////////////
// 公会相关的DB请求处理
//////////////////////////////////////////////////////////////////////////
void LoadGuildList(CDataPacketReader &inPacket);
void LoadGuildDetail(CDataPacketReader &inPacket);
void AddGuild(CDataPacketReader &inPacket);
void LoadGuildSkillDb(CDataPacketReader &inPacket);
void DeleteMember(CDataPacketReader &inPacket);
void SaveActorGuild(CDataPacketReader &inPacket, bool bResp = true);
void LoadActorGuild(unsigned int nActorid);
void AddGuildMember(CDataPacketReader &inPacket);
void InitGuildSkillInfo(CDataPacketReader &inPacket);
void SaveGuildSkill(CDataPacketReader &inPacket);
void SaveGuildEventDb(CDataPacketReader &inPacket);
void LoadGuildEventDb(CDataPacketReader &inPacket);
void SaveGuild(CDataPacketReader &inPacket);
void DeleteGuild(CDataPacketReader &inPacket);
void AddMemberOffLine(CDataPacketReader &inPacket);
void SaveGuildDepotDb(CDataPacketReader &inPacket);
void LoadGuildDepoyFromDb(CDataPacketReader &inPacket);
void LoadGuildDepotRecordDb(CDataPacketReader &inPacket);
void SaveGuildDepotRecordDb(CDataPacketReader &inPacket);
void LoadActorBuildingDb(CDataPacketReader &inPacket);
void LoadGuildApplyList(CDataPacketReader &inPacket);
void DealGuildApply(CDataPacketReader &inPacket);
void LoadActorApplyResult(CDataPacketReader &inPacket);
void SaveActorApplyResult(CDataPacketReader &inPacket);
//////////////////////////////////////////////////////////////////////////
// 活动相关的DB请求处理
//////////////////////////////////////////////////////////////////////////
void LoadActivityList(CDataPacketReader &inPacket);
void SaveActivityList(CDataPacketReader &inPacket);
void LoadActorActivity(CDataPacketReader &inPacket, unsigned int nActorID, int nRawServerId, int nLoginServerId);
void SaveActorActivity(CDataPacketReader &inPacket, unsigned int nActorID, int nRawServerId, int nLoginServerId);
//////////////////////////////////////////////////////////////////////////
// boss相关的DB请求处理
//////////////////////////////////////////////////////////////////////////
void LoadBossList(CDataPacketReader &inPacket);
void SaveBossList(CDataPacketReader &inPacket);
void LoadActorBossList(CDataPacketReader &inPacket, unsigned int nActorID, int nRawServerId, int nLoginServerId);
void SaveActorBossList(CDataPacketReader &inPacket, unsigned int nActorID, int nRawServerId, int nLoginServerId);
//////////////////////////////////////////////////////////////////////////
// 消息相关的DB请求处理
//////////////////////////////////////////////////////////////////////////
void LoadMsgListFromId(unsigned int nActorId,INT64 nMsgId, int nRawServerId, int nLoginServerId);
void LoadMsgList(CDataPacketReader &inPacket);
void DeleteMsg(CDataPacketReader &inPacket);
void AddMsg(CDataPacketReader &inPacket);
void AddMsgByName(CDataPacketReader &inPacket);
//////////////////////////////////////////////////////////////////////////
// 好友相关的DB请求处理
//////////////////////////////////////////////////////////////////////////
int SaveFriendsData(unsigned int nActorid,int nRsType,int nFriendId,LPCSTR szName,UINT nParam);
void SaveFriends(CDataPacketReader &inPacket, bool bResp = true);
void LoadFriends(CDataPacketReader &inPacket);
int CleanFriends(unsigned int nActorid);
//////////////////////////////////////////////////////////////////////////
// 宠物相关的DB请求处理
//////////////////////////////////////////////////////////////////////////
void QueryPetData(unsigned int nActorID, int nRawServerId, int nLoginServerId);
void QueryPetDetailData(CDataPacketReader &inPacket); //装载宠物的装备/技能等数据
void QueryPetSkillData(unsigned int nActorID, int nRawServerId, int nLoginServerId);
void SavePetSkillData(CDataPacketReader &inPacket, bool bResp = true); //保存宠物的技能数据
void SavePetToDB(CDataPacketReader &inPacket, bool bResp = true);
//////////////////////////////////////////////////////////////////////////
// 头衔相关的DB请求处理
//////////////////////////////////////////////////////////////////////////
void LoadBaseRank(CDataPacketReader &inPacket);
void SaveBaseRank(CDataPacketReader &inPacket);
void SaveBaseRankCS(CDataPacketReader &inPacket);//跨服的排行榜保存数据
//////////////////////////////////////////////////////////////////////////
// 关系相关的DB请求处理
//////////////////////////////////////////////////////////////////////////
void QueryRelationData(unsigned int nActorId, int nRawServerId, int nLoginServerId);
void SaveRelation(CDataPacketReader &inPacket);
//////////////////////////////////////////////////////////////////////////
// 战力排行榜
//////////////////////////////////////////////////////////////////////////
VOID LoadActorCombatRank(CDataPacketReader &inPacket);
VOID LoadActorCombatGameInfo(CDataPacketReader &inPacket);
VOID UpdateActorCombatAward(CDataPacketReader &inPacket);
VOID SaveActorCombatGameInfo(CDataPacketReader &inPacket);
VOID LoadCombatRecord(CDataPacketReader &inPacket);
VOID SaveCombatRecordToDb(CDataPacketReader &inPacket);
//////////////////////////////////////////////////////////////////////////
// 职业宗师竞技
//////////////////////////////////////////////////////////////////////////
VOID LoadActorCombatBaseInfo(CDataPacketReader &inPacket);
VOID SaveActorCombatBaseInfo(CDataPacketReader &inPacket);
VOID LoadActorCombatLog(CDataPacketReader &inPacket);
VOID SaveActorCombatLog(CDataPacketReader &inPacket);
//////////////////////////////////////////////////////////////////////////
// 好友等
//////////////////////////////////////////////////////////////////////////
VOID LoadActorFriendsData(CDataPacketReader &inPacket);
VOID LoadActorFriendsData(unsigned int nActorID, int nRawServerId, int nLoginServerId);
VOID SaveActorFriendsData(CDataPacketReader &inPacket);
VOID LoadActorDeathData(unsigned int nActorID, int nRawServerId, int nLoginServerId);
VOID LoadActorDeathData(CDataPacketReader &inPacket);
VOID SaveActorDeathData(CDataPacketReader &inPacket);
VOID LoadActorDeathDropData(CDataPacketReader &inPacket);
VOID SaveActorDeathDropData(CDataPacketReader &inPacket);
VOID DeleteActorFriendData(CDataPacketReader &inPacket);
VOID AddFriendChatMsg(CDataPacketReader &inPacket);
VOID LoadFriendChatMsgData(CDataPacketReader &inPacket);
VOID LoadFiendOfflineData(CDataPacketReader &inPacket);
//后台操作
VOID AddFilterWordsDbMsg(CDataPacketReader &inPacket);
VOID BackRemoveItem(CDataPacketReader &inPacket);
VOID BackRemoveMoney(CDataPacketReader &inPacket);
VOID LoadTopLevelActorData(CDataPacketReader &inPacket);
VOID LoadTopLevelActorOneData(CDataPacketReader& inPacket);//世界等级查询
VOID LoadActorConsumeRank(CDataPacketReader &inPacket);
VOID LoadActorTopicBattle(CDataPacketReader &inPacket);
VOID LoadActorSwingLevelData(CDataPacketReader &inPacket);
VOID LoadActorHeroTopicRankData(CDataPacketReader &inPacket);
VOID LoadAllActivityData(CDataPacketReader &inPacket);
VOID LoadCombineLevelActorData(CDataPacketReader &inPacket);
VOID LoadCombineBattleActorData(CDataPacketReader &inPacket);
VOID LoadActorGameSetData(CDataPacketReader &inPacket);
VOID SaveActorGameSetData(CDataPacketReader &inPacket);
//////////////////////////////////////////////////////////////////////////
// 邮件
//////////////////////////////////////////////////////////////////////////
void QueryActorMail(unsigned int nActorID, int nRawServerId, int nLoginServerId);
void AddActorOfflineMail(CDataPacketReader & inPacket);
void SaveActorMail(CDataPacketReader & inPacket, bool bResp = true);
void LoadActorMail(CDataPacketReader & inPacket);
void LoadNewServerMail(int nServerId, int nRawServerId, int nMaxServerMailId);
void AddNewServerMail(CDataPacketReader & inPacket);
void SaveNewServerMail(CDataPacketReader & inPacket);
VOID LoadActorNewTitleData(CDataPacketReader &inPacket);
VOID SaveActorNewTitleData(CDataPacketReader &inPacket);
VOID LoadActorCustomTitleData(CDataPacketReader &inPacket);
VOID SaveActorCustomTitleData(CDataPacketReader &inPacket);
//寄卖
void SaveActorConsignment(CDataPacketReader &inPacket);//保存玩家的
void SaveConsignmentItem(CDataPacketReader &inPacket);//保存系统的,分包
//void SaveConsignmentIncome(CDataPacketReader &inPacket);
void LoadConsignmentItem(CDataPacketReader &inPacket);
void LoadConsignmentIncome(CDataPacketReader &inPacket);
//充值
void LoadFee(CDataPacketReader &inPacket, unsigned int nActorID, int nRawServerId, int nLoginServerId);
void DelFee(CDataPacketReader &inPacket, unsigned int nActorID, int nRawServerId, int nLoginServerId);
//称号
void QueryActorNewTitle(unsigned int nActorId, int nRawServerId, int nServerId);
void QueryActorCustomTitle(unsigned int nActorId, int nRawServerId, int nServerId);
void QueryActorWarChariot(unsigned int nActorId, int nRawServerId, int nServerId);
private:
//////////////////////////////////////////////////////////////////////////
// 申请和投递消息数据包
//////////////////////////////////////////////////////////////////////////
/*
* Comments: 宿
* Param const jxSrvDef::INTERSRVCMD nCmd:
* @Return CDataPacket&:
* @Remark:
*/
CDataPacket& allocProtoPacket(const jxSrvDef::INTERSRVCMD nCmd);
/*
* Comments: 宿
* Param CDataPacket & packet:
* @Return void:
* @Remark:
*/
void flushProtoPacket(CDataPacket &packet);
//////////////////////////////////////////////////////////////////////////
// 处理DB请求的内部实现函数
//////////////////////////////////////////////////////////////////////////
bool QueryOfflineUserBasicInfo(unsigned int nActorId, int nRawServerId, int nLoginServerId);
void QueryOfflineHeroInfo(unsigned int nActorId, unsigned int nHeroId, int nRawServerId, int nLoginServerId);
void QueryOfflineHeroEquips(unsigned int nActorID,unsigned int nHeroId, int nRawServerId, int nLoginServerId);
void QueryEquipedGemData(unsigned int nActorID, int nRawServerId, int nLoginServerId);
int SaveGoingQuest(unsigned int nActorid, int nTaskId, int id, int value);
int CleanQuestData(unsigned int nActorId);
int SaveRepeatQuest(unsigned int nActorid,int nTaskId, int qtime);
void QueryQuestFromDB(unsigned int nActorId, int nRawServerId, int nLoginServerId);
int GetGoingQuest(unsigned int nActorid, CDataPacket& out);
int GetRepeatQuest(unsigned int nActorid, CDataPacket& out);
void LoadFriends(unsigned int nActorId);
/*
* Comments:
* Param int nErr:
* Param int index:
* Param Uint64 hHandle:handle便
* Param int nGid:id号
* Param LPCSTR sGuildName:
* Param LPCSTR sFoundName:
* Param BYTE nZY:
* @Return VOID:
*/
void SendAddGuildResult(int nRawServerId,
int nLoginServerId,
int nErr,
int index,
Uint64 hHandle,
unsigned int nGid,
LPCSTR sGuildName,
LPCSTR sFoundName,
BYTE nZY,
INT_PTR nIcon);
private:
CSQLConenction *m_pSQLConnection;
ILogicDBRequestHost *m_pHost;
CBufferAllocator m_Allocator; // 内存池
PCHAR m_pHugeSQLBuffer; // 大型SQL查询语句缓冲长度为dwHugeSQLBufferSize
static const SIZE_T dwHugeSQLBufferSize = 1024 * 1024 * 32;
};
#endif