2022-11-28 15:09:57 +08:00

82 lines
3.2 KiB
C++

#pragma once
#include <a8/commonrank.h>
#include <a8/timer_attacher.h>
namespace cs
{
class MFGuildBasic;
}
struct timer_list;
class GuildMgr : public a8::Singleton<GuildMgr>
{
private:
GuildMgr() {};
friend class a8::Singleton<GuildMgr>;
public:
void Init();
void UnInit();
void __GuildCreate(f8::JsonHttpRequest* request);
void __GuildSearch(f8::JsonHttpRequest* request);
void __GuildDismiss(f8::JsonHttpRequest* request);
void __GuildUpdate(f8::JsonHttpRequest* request);
void __GuildRename(f8::JsonHttpRequest* request);
void __GuildRank(f8::JsonHttpRequest* request);
void __GuildConfirmed(f8::JsonHttpRequest* request);
void __GuildDirtyWordCheck(f8::JsonHttpRequest* request);
void __GuildDirtyWordReplace(f8::JsonHttpRequest* request);
void __GenTestData(f8::JsonHttpRequest* request);
private:
cs::MFGuildBasic* GetGuildById(long long guild_id);
cs::MFGuildBasic* GetGuildByName(int gameid,
int channel,
long long name_ext1,
long long name_ext2,
const std::string& guild_name);
a8::CommonRank<cs::MFGuildBasic>* GetGuildRank(int gameid);
a8::CommonRank<cs::MFGuildBasic>* GetGuildList(int gameid);
void AddGuild(cs::MFGuildBasic* guild);
void LoadGuild(int instance_id, long long last_idx);
void SyncGuild(int instance_id);
void OnOneDBDone(int instance_id);
void RefreshGuild(long long guild_id);
void GenGuildRank();
void UpdateGuild(cs::MFGuildBasic* new_guild);
void UpdateRank(cs::MFGuildBasic* guild);
void InstallSyncGuildTimer();
std::string GenGuildName(int gameid,
int channel,
long long name_ext1,
long long name_ext2,
const std::string& raw_name);
void GuildRename(cs::MFGuildBasic* guild, const std::string& new_raw_name);
void InternalSearch(const std::string& account_id,
std::set<long long>& applyed_guilds,
a8::MutableXObject* guild_list,
const std::string& search_name,
int curr_page,
int page_size,
int& total_count,
int& total_page);
std::set<long long>& ForceSearchCache(const std::string& account_id, const std::string& search_name);
private:
a8::TimerAttacher timer_attacher_;
bool load_done_ = false;
std::map<int, int> pending_db_hash_;
std::map<int, int> sync_db_hash_;
std::map<long long, cs::MFGuildBasic*> id_hash_;
std::map<std::string, cs::MFGuildBasic*> name_hash_;
std::map<long long, a8::CommonRank<cs::MFGuildBasic>> rank_list_;
std::map<long long, a8::CommonRank<cs::MFGuildBasic>> sorted_list_;
std::function<bool(const cs::MFGuildBasic*, const cs::MFGuildBasic*)> rank_cmp_func_;
std::function<bool(const cs::MFGuildBasic*, const cs::MFGuildBasic*)> sorted_cmp_func_;
std::map<std::string, std::tuple<timer_list*, std::string, std::set<long long>>> search_cache_;
friend void DbToGuildBasic(const std::vector<std::string>& row, cs::MFGuildBasic* guild);
};