From b282c7e56b579f446929cacb63b85436aed6d20c Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Tue, 22 Sep 2020 20:40:13 +0800 Subject: [PATCH] 1 --- server/rankserver/guildmgr.cc | 71 +++++++++++++++++++++++++++++++- server/rankserver/guildmgr.h | 3 ++ server/rankserver/jsondatamgr.cc | 5 +++ server/rankserver/jsondatamgr.h | 1 + 4 files changed, 78 insertions(+), 2 deletions(-) diff --git a/server/rankserver/guildmgr.cc b/server/rankserver/guildmgr.cc index 5005670..0bb9cb6 100644 --- a/server/rankserver/guildmgr.cc +++ b/server/rankserver/guildmgr.cc @@ -6,10 +6,16 @@ #include "cs_proto.pb.h" #include "dbengine.h" #include "app.h" +#include "jsondatamgr.h" void GuildMgr::Init() { - + auto mysql_cluster_conf = JsonDataMgr::Instance()->GetMysqlClusterConf(); + for (int i = 0; i < mysql_cluster_conf->Size(); ++i) { + int instance_id = mysql_cluster_conf->At(i)->At("instance_id")->AsXValue(); + pending_db_hash_[instance_id] = 0; + LoadGuild(instance_id, 0); + } } void GuildMgr::UnInit() @@ -38,7 +44,7 @@ void GuildMgr::__GuildCreate(f8::JsonHttpRequest* request) cs::MFGuildBasic* guild = new cs::MFGuildBasic; TypeConvert::Convert(request, guild); a8::XObject conn = DBEngine::Instance()->GetConnInfo(guild_id); - DBEngine::Instance()->ExecAsyncQuery + DBEngine::Instance()->ExecAsyncScript ( conn, "INSERT INTO `guild`(gameid, guild_id, guild_name, guild_lv, guild_exp, guild_badge, " @@ -204,3 +210,64 @@ void GuildMgr::AddGuild(cs::MFGuildBasic* guild) { guild_hash_[guild->guild_id()] = guild; } + +void GuildMgr::LoadGuild(int instance_id, long long last_idx) +{ + DBEngine::Instance()->ExecAsyncQuery + ( + *JsonDataMgr::Instance()->GetMysqlConf(instance_id), + "SELECT idx, gameid, guild_id, guild_name, guild_lv, guild_exp, guild_badge, guild_notice, " + " guild_declaration, owner_id, owner_name, owner_avatar_url, " + " creator_id, creator_name, creator_avatar_url, guild_status, createtime, modifytime " + "FROM `guild` WHERE idx > %d;", + { + last_idx + }, + a8::XParams() + .SetSender(instance_id) + .SetParam1(last_idx), + [] (a8::XParams& param, const f8::DataSet* data_set) + { + int instance_id = param.sender; + long long last_idx = param.param1; + if (data_set && !data_set->empty()) { + for (auto& row : *data_set) { + cs::MFGuildBasic* guild = new cs::MFGuildBasic; + guild->set_guild_id(a8::XValue(row[2])); + guild->set_guild_name(row[3]); + guild->set_guild_lv(a8::XValue(row[4])); + guild->set_guild_exp(a8::XValue(row[5])); + guild->set_guild_badge(a8::XValue(row[6])); + guild->set_guild_declaration(row[8]); + guild->set_guild_owner_id(row[9]); + guild->set_guild_owner_name(row[10]); + guild->set_guild_owner_avatar_url(row[11]); + guild->set__gameid(a8::XValue(row[1])); + GuildMgr::Instance()->AddGuild(guild); + if (a8::XValue(row[0]).GetInt64() > last_idx) { + last_idx = a8::XValue(row[0]); + } + } + GuildMgr::Instance()->LoadGuild(instance_id, last_idx); + } else { + GuildMgr::Instance()->OnOneDBDone(instance_id); + } + }, + [] (a8::XParams& param, int error_code, const std::string& error_msg) + { + abort(); + }, + instance_id); +} + +void GuildMgr::OnOneDBDone(int instance_id) +{ + pending_db_hash_[instance_id] = 1; + load_done_ = true; + for (auto& pair : pending_db_hash_) { + if (!pair.second) { + load_done_ = false; + break; + } + } +} diff --git a/server/rankserver/guildmgr.h b/server/rankserver/guildmgr.h index 10b0b48..aabd993 100644 --- a/server/rankserver/guildmgr.h +++ b/server/rankserver/guildmgr.h @@ -24,9 +24,12 @@ class GuildMgr : public a8::Singleton cs::MFGuildBasic* GetGuild(long long guild_id); std::vector* GetGuildRank(int gameid); void AddGuild(cs::MFGuildBasic* guild); + void LoadGuild(int instance_id, long long last_idx); + void OnOneDBDone(int instance_id); private: bool load_done_ = false; + std::map pending_db_hash_; std::map guild_hash_; std::map> sorted_game_guild_list_; }; diff --git a/server/rankserver/jsondatamgr.cc b/server/rankserver/jsondatamgr.cc index 2027393..d80d304 100644 --- a/server/rankserver/jsondatamgr.cc +++ b/server/rankserver/jsondatamgr.cc @@ -54,3 +54,8 @@ std::shared_ptr JsonDataMgr::GetMysqlClusterConf() { return std::make_shared(mysql_cluster_json_); } + +std::shared_ptr JsonDataMgr::GetMysqlConf(int instance_id) +{ + return mysql_cluster_json_[instance_id - 1]; +} diff --git a/server/rankserver/jsondatamgr.h b/server/rankserver/jsondatamgr.h index 34d9b26..8668e3f 100644 --- a/server/rankserver/jsondatamgr.h +++ b/server/rankserver/jsondatamgr.h @@ -12,6 +12,7 @@ class JsonDataMgr : public a8::Singleton std::shared_ptr GetMysqlClusterConf(); std::shared_ptr GetConf(); + std::shared_ptr GetMysqlConf(int instance_id); private: std::string work_path_ = "../config";