180 lines
6.0 KiB
C++
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;
|
|
}
|