relation/server/rankserver/guildmgr.cc
aozhiwei df68445d60 1
2020-09-21 19:53:59 +08:00

180 lines
6.0 KiB
C++

#include "precompile.h"
#include "guildmgr.h"
#include "typeconvert.h"
#include "ss_proto.pb.h"
#include "cs_proto.pb.h"
#include "dbengine.h"
#include "app.h"
void GuildMgr::Init()
{
}
void GuildMgr::UnInit()
{
}
void GuildMgr::__GuildCreate(f8::JsonHttpRequest* request)
{
request->pending = true;
request->resp_xobj->SetVal("errcode", 0);
request->resp_xobj->SetVal("errmsg", "");
long long guild_id = request->request.At("guild_id")->AsXValue();
if (GetGuild(guild_id)) {
request->resp_xobj->SetVal("errcode", 1);
request->resp_xobj->SetVal("errmsg", "guild_id已经存在");
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)
.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);
}
void GuildMgr::__GuildSearch(f8::JsonHttpRequest* request)
{
int curr_page = request->request.At("curr_page")->AsXValue();
int page_size = request->request.At("page_size")->AsXValue();
std::string search_name = request->request.At("guild_name")->AsXValue().GetString();
if (curr_page < 0) {
curr_page = 0;
}
if (page_size < 1) {
page_size = 1;
}
int total_page = 0;
int total_count = 0;
std::vector<cs::MFGuildBasic*> last_page_data;
request->resp_xobj->SetVal("errcode", 0);
request->resp_xobj->SetVal("errmsg", "");
request->resp_xobj->SetVal("curr_page", curr_page);
request->resp_xobj->SetVal("page_size", page_size);
a8::MutableXObject* guild_list = a8::MutableXObject::NewArray();
for (auto& pair : guild_hash_) {
cs::MFGuildBasic* guild = pair.second;
if (guild->guild_name().find(search_name) != std::string::npos) {
++total_count;
last_page_data.push_back(guild);
if (last_page_data.size() % page_size == 0) {
last_page_data.clear();
}
if (total_count >= curr_page * page_size && guild_list->Size() < page_size) {
a8::MutableXObject* guild_xobj = a8::MutableXObject::NewObject();
TypeConvert::Convert(guild, guild_xobj);
delete guild_xobj;
}
}
}
total_page = std::ceil((double)total_count / page_size);
if (curr_page >= total_page) {
for (auto& guild : last_page_data) {
a8::MutableXObject* guild_xobj = a8::MutableXObject::NewObject();
TypeConvert::Convert(guild, guild_xobj);
delete guild_xobj;
}
curr_page = total_page - 1;
}
request->resp_xobj->SetVal("_total_page", total_page);
request->resp_xobj->SetVal("_total_count", total_count);
request->resp_xobj->SetVal("guild_list", *guild_list);
delete guild_list;
}
void GuildMgr::__GuildRank(f8::JsonHttpRequest* request)
{
int gameid = request->request.At("gameid")->AsXValue();
std::vector<cs::MFGuildBasic*>* 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", 0);
a8::MutableXObject* guild_list = a8::MutableXObject::NewArray();
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;
}
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<cs::MFGuildBasic*>* 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;
}