This commit is contained in:
aozhiwei 2020-09-23 18:00:55 +08:00
parent 20286a1e5f
commit ff7a387d9d
2 changed files with 65 additions and 0 deletions

View File

@ -10,6 +10,8 @@
#include "app.h" #include "app.h"
#include "jsondatamgr.h" #include "jsondatamgr.h"
const size_t MAX_RANK_HUMAN_NUM = 50;
void GuildMgr::Init() void GuildMgr::Init()
{ {
auto mysql_cluster_conf = JsonDataMgr::Instance()->GetMysqlClusterConf(); auto mysql_cluster_conf = JsonDataMgr::Instance()->GetMysqlClusterConf();
@ -322,6 +324,7 @@ void GuildMgr::OnOneDBDone(int instance_id)
a8::UdpLog::Instance()->Debug("%d db done", {instance_id}); a8::UdpLog::Instance()->Debug("%d db done", {instance_id});
if (load_done_) { if (load_done_) {
a8::UdpLog::Instance()->Debug("all db done", {}); a8::UdpLog::Instance()->Debug("all db done", {});
GenGuildRank();
} }
} }
@ -364,3 +367,61 @@ void GuildMgr::RefreshGuild(long long guild_id)
}, },
guild_id); guild_id);
} }
void GuildMgr::GenGuildRank()
{
auto force_rank_list =
[this] (int gameid) -> std::vector<cs::MFGuildBasic*>&
{
auto itr = sorted_game_guild_list_.find(gameid);
if (itr != sorted_game_guild_list_.end()) {
return itr->second;
}
sorted_game_guild_list_[gameid] = std::vector<cs::MFGuildBasic*>();
return sorted_game_guild_list_[gameid];
};
sorted_game_guild_list_.clear();
for (auto& pair : guild_hash_) {
auto guild = pair.second;
std::vector<cs::MFGuildBasic*>& rank_list = force_rank_list(guild->_gameid());
UpdateRank(rank_list, guild);
}
}
void GuildMgr::ResortRank(std::vector<cs::MFGuildBasic*>& rank_list)
{
std::sort(rank_list.begin(),
rank_list.end(),
[] (cs::MFGuildBasic* a, cs::MFGuildBasic* b) -> bool
{
return GuildMgr::Instance()->CmpGuild(a, b);
});
}
void GuildMgr::UpdateRank(std::vector<cs::MFGuildBasic*>& rank_list, cs::MFGuildBasic* guild)
{
if (rank_list.size() < MAX_RANK_HUMAN_NUM) {
if (std::find(rank_list.begin(), rank_list.end(), guild) == rank_list.end()) {
rank_list.push_back(guild);
ResortRank(rank_list);
}
} else {
if (CmpGuild(guild, rank_list[rank_list.size() - 1])) {
if (std::find(rank_list.begin(), rank_list.end(), guild) == rank_list.end()) {
rank_list[rank_list.size() - 1] = guild;
ResortRank(rank_list);
}
}
}
}
bool GuildMgr::CmpGuild(cs::MFGuildBasic* a, cs::MFGuildBasic* b)
{
if (a->guild_lv() > b->guild_lv()) {
return true;
}
if (a->guild_exp() > b->guild_exp()) {
return true;
}
return a->guild_id() > b->guild_id();
}

View File

@ -27,6 +27,10 @@ class GuildMgr : public a8::Singleton<GuildMgr>
void LoadGuild(int instance_id, long long last_idx); void LoadGuild(int instance_id, long long last_idx);
void OnOneDBDone(int instance_id); void OnOneDBDone(int instance_id);
void RefreshGuild(long long guild_id); void RefreshGuild(long long guild_id);
void GenGuildRank();
void ResortRank(std::vector<cs::MFGuildBasic*>& rank_list);
void UpdateRank(std::vector<cs::MFGuildBasic*>& rank_list, cs::MFGuildBasic* guild);
bool CmpGuild(cs::MFGuildBasic* a, cs::MFGuildBasic* b);
private: private:
bool load_done_ = false; bool load_done_ = false;