diff --git a/server/rankserver/guildmgr.cc b/server/rankserver/guildmgr.cc index 465b3cc..2ceb26d 100644 --- a/server/rankserver/guildmgr.cc +++ b/server/rankserver/guildmgr.cc @@ -5,6 +5,7 @@ #include "ss_proto.pb.h" #include "cs_proto.pb.h" #include "dbengine.h" +#include "app.h" void GuildMgr::Init() { @@ -29,23 +30,58 @@ void GuildMgr::__GuildCreate(f8::JsonHttpRequest* request) return; } + cs::MFGuildBasic* guild = new cs::MFGuildBasic; + TypeConvert::Convert(request, guild); a8::XObject conn = DBEngine::Instance()->GetConnInfo(guild_id); DBEngine::Instance()->ExecAsyncQuery ( conn, - "", + "INSERT INTO `guild`(gameid, guild_id, guild_name, guild_lv, guild_exp, guild_badge, " + " guild_apply_num, guild_notice, guild_declaration, guild_log, owner_id, " + " owner_name, owner_avatar_url, creator_id, creator_name, creator_avatar_url, " + " guild_data, guild_status, createtime, modifytime)" + "VALUES(%d, %d, '%s', %d, %d, %d, %d, '%s', '%s', '%s', '%s', " + " '%s', '%s', '%s', '%s', '%s', " + " '%s', %d, %d, %d)", { + guild->_gameid(), + guild->guild_id(), + guild->guild_name(), + guild->guild_lv(), + guild->guild_exp(), + guild->guild_badge(), + 0, + "", + guild->guild_declaration(), + "", + guild->guild_owner_id(), + guild->guild_owner_name(), + guild->guild_owner_avatar_url(), + guild->guild_owner_id(), + guild->guild_owner_name(), + guild->guild_owner_avatar_url(), + "", + 0, + App::Instance()->nowtime, + App::Instance()->nowtime }, a8::XParams() - .SetSender(request), + .SetSender(request) + .SetParam1(guild), [] (a8::XParams& param, const f8::DataSet* data_set) { f8::JsonHttpRequest* request = (f8::JsonHttpRequest*)param.sender.GetUserData(); + cs::MFGuildBasic* guild = (cs::MFGuildBasic*)param.param1.GetUserData(); + + GuildMgr::Instance()->AddGuild(guild); delete request; }, [] (a8::XParams& param, int error_code, const std::string& error_msg) { f8::JsonHttpRequest* request = (f8::JsonHttpRequest*)param.sender.GetUserData(); + cs::MFGuildBasic* guild = (cs::MFGuildBasic*)param.param1.GetUserData(); + + delete guild; delete request; }, 0); @@ -103,17 +139,23 @@ void GuildMgr::__GuildSearch(f8::JsonHttpRequest* request) void GuildMgr::__GuildRank(f8::JsonHttpRequest* request) { + int gameid = request->request.At("gameid")->AsXValue(); + std::vector* sorted_guild_list = GetGuildRank(gameid); + request->resp_xobj->SetVal("errcode", 0); request->resp_xobj->SetVal("errmsg", ""); request->resp_xobj->SetVal("curr_page", 0); request->resp_xobj->SetVal("page_size", 50); request->resp_xobj->SetVal("_total_page", 1); - request->resp_xobj->SetVal("_total_count", sorted_guild_list_.size()); + request->resp_xobj->SetVal("_total_count", 0); a8::MutableXObject* guild_list = a8::MutableXObject::NewArray(); - for (auto& guild : sorted_guild_list_) { - a8::MutableXObject* guild_xobj = a8::MutableXObject::NewObject(); - TypeConvert::Convert(guild, guild_xobj); - delete guild_xobj; + if (sorted_guild_list) { + request->resp_xobj->SetVal("_total_count", sorted_guild_list->size()); + for (auto& guild : *sorted_guild_list) { + a8::MutableXObject* guild_xobj = a8::MutableXObject::NewObject(); + TypeConvert::Convert(guild, guild_xobj); + delete guild_xobj; + } } request->resp_xobj->SetVal("guild_list", *guild_list); delete guild_list; @@ -124,3 +166,14 @@ cs::MFGuildBasic* GuildMgr::GetGuild(long long guild_id) auto itr = guild_hash_.find(guild_id); return itr != guild_hash_.end() ? itr->second : nullptr; } + +std::vector* GuildMgr::GetGuildRank(int gameid) +{ + auto itr = sorted_game_guild_list_.find(gameid); + return itr != sorted_game_guild_list_.end() ? &itr->second : nullptr; +} + +void GuildMgr::AddGuild(cs::MFGuildBasic* guild) +{ + guild_hash_[guild->guild_id()] = guild; +} diff --git a/server/rankserver/guildmgr.h b/server/rankserver/guildmgr.h index 7decc99..86de76f 100644 --- a/server/rankserver/guildmgr.h +++ b/server/rankserver/guildmgr.h @@ -21,8 +21,10 @@ class GuildMgr : public a8::Singleton private: cs::MFGuildBasic* GetGuild(long long guild_id); + std::vector* GetGuildRank(int gameid); + void AddGuild(cs::MFGuildBasic* guild); private: std::map guild_hash_; - std::vector sorted_guild_list_; + std::map> sorted_game_guild_list_; }; diff --git a/server/rankserver/typeconvert.cc b/server/rankserver/typeconvert.cc index aa35a53..bf02fa2 100644 --- a/server/rankserver/typeconvert.cc +++ b/server/rankserver/typeconvert.cc @@ -17,3 +17,8 @@ void TypeConvert::Convert(const cs::MFGuildBasic* guild_basic, a8::MutableXObjec xobj->SetVal("guild_owner_name", guild_basic->guild_owner_name()); xobj->SetVal("guild_owner_avatar_url", guild_basic->guild_owner_avatar_url()); } + +void TypeConvert::Convert(const f8::JsonHttpRequest* request, cs::MFGuildBasic* guild_basic) +{ + +} diff --git a/server/rankserver/typeconvert.h b/server/rankserver/typeconvert.h index 4ebcad8..bc311e7 100644 --- a/server/rankserver/typeconvert.h +++ b/server/rankserver/typeconvert.h @@ -7,9 +7,15 @@ namespace cs class MFGuildBasic; } +namespace f8 +{ + struct JsonHttpRequest; +} + class TypeConvert { public: static void Convert(const cs::MFGuildBasic* guild_basic, a8::MutableXObject* xobj); + static void Convert(const f8::JsonHttpRequest* request, cs::MFGuildBasic* guild_basic); }; diff --git a/server/tools/protobuild/cs_proto.proto b/server/tools/protobuild/cs_proto.proto index e6edae6..edb9ea3 100644 --- a/server/tools/protobuild/cs_proto.proto +++ b/server/tools/protobuild/cs_proto.proto @@ -100,6 +100,8 @@ message MFGuildBasic optional string guild_owner_id = 8; //公会队长id optional string guild_owner_name = 9; //公会队长名字 optional string guild_owner_avatar_url = 10; //公会队长头像 + + optional int32 _gameid = 100; //gameid } //登录好友服