From effbe6c224045ba0c371f48ef1f3aaefac9d41ef Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Fri, 9 Oct 2020 15:31:55 +0800 Subject: [PATCH] 1 --- server/rankserver/guildmgr.cc | 57 +++++++++++++++++++++++++++++++---- server/rankserver/guildmgr.h | 3 +- server/rankserver/metamgr.cc | 5 +++ server/rankserver/metamgr.h | 2 ++ 4 files changed, 60 insertions(+), 7 deletions(-) diff --git a/server/rankserver/guildmgr.cc b/server/rankserver/guildmgr.cc index 19bb37c..2c896ad 100644 --- a/server/rankserver/guildmgr.cc +++ b/server/rankserver/guildmgr.cc @@ -11,8 +11,10 @@ #include "app.h" #include "jsondatamgr.h" #include "IMListener.h" +#include "metamgr.h" const size_t MAX_RANK_HUMAN_NUM = 50; +const char* const NAME_MAGIC_SYMBOL = "@"; void GuildMgr::Init() { @@ -37,9 +39,6 @@ void GuildMgr::__GuildCreate(f8::JsonHttpRequest* request) request->resp_xobj->SetVal("errmsg", ""); return; } - 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 (GetGuildById(guild_id)) { @@ -51,6 +50,38 @@ void GuildMgr::__GuildCreate(f8::JsonHttpRequest* request) std::string guild_data; cs::MFGuildBasic* guild = new cs::MFGuildBasic; TypeConvert::Convert(request, guild); + if (guild->guild_name().empty()) { + request->resp_xobj->SetVal("errcode", 2); + request->resp_xobj->SetVal("errmsg", "公会名字不能为空"); + delete guild; + return; + } + if (GetGuildByName( + guild->_gameid(), + guild->_channel(), + guild->guild_name() + )) { + request->resp_xobj->SetVal("errcode", 3); + request->resp_xobj->SetVal("errmsg", "公会名已经存在"); + delete guild; + return; + } + if (MetaMgr::Instance()->HasDirtyWord(guild->guild_name())) { + request->resp_xobj->SetVal("errcode", 4); + request->resp_xobj->SetVal("errmsg", "公会名含有违禁字符"); + delete guild; + return; + } + if (MetaMgr::Instance()->HasDirtyWord(guild->guild_declaration())) { + request->resp_xobj->SetVal("errcode", 5); + request->resp_xobj->SetVal("errmsg", "公会宣言含有违禁字符"); + delete guild; + return; + } + + request->pending = true; + request->resp_xobj->SetVal("errcode", 0); + request->resp_xobj->SetVal("errmsg", ""); a8::XObject conn = DBEngine::Instance()->GetConnInfo(guild_id); DBEngine::Instance()->ExecAsyncScript ( @@ -111,6 +142,14 @@ void GuildMgr::__GuildCreate(f8::JsonHttpRequest* request) f8::JsonHttpRequest* request = (f8::JsonHttpRequest*)param.sender.GetUserData(); cs::MFGuildBasic* guild = (cs::MFGuildBasic*)param.param1.GetUserData(); + { + std::string response; + request->resp_xobj->SetVal("errcode", 2); + request->resp_xobj->SetVal("errmsg", "服务器内部错误"); + request->resp_xobj->ToJsonStr(response); + IMListener::Instance()->SendText(request->socket_handle, a8::HttpResponse(response)); + } + delete guild; delete request; }, @@ -306,9 +345,9 @@ cs::MFGuildBasic* GuildMgr::GetGuildById(long long guild_id) return itr != id_hash_.end() ? itr->second : nullptr; } -cs::MFGuildBasic* GuildMgr::GetGuildByName(int gameid, const std::string& guild_name) +cs::MFGuildBasic* GuildMgr::GetGuildByName(int gameid, int channel, const std::string& guild_name) { - auto itr = name_hash_.find(guild_name); + auto itr = name_hash_.find(GenGuildName(gameid, channel, guild_name)); return itr != name_hash_.end() ? itr->second : nullptr; } @@ -321,7 +360,7 @@ std::vector* GuildMgr::GetGuildRank(int gameid) void GuildMgr::AddGuild(cs::MFGuildBasic* guild) { id_hash_[guild->guild_id()] = guild; - name_hash_[guild->guild_name()] = guild; + name_hash_[GenGuildName(guild->_gameid(), guild->_channel(), guild->guild_name())] = guild; } void GuildMgr::LoadGuild(int instance_id, long long last_idx) @@ -598,3 +637,9 @@ void GuildMgr::InstallSyncGuildTimer() &timer_attacher_.timer_list_); } } + +std::string GuildMgr::GenGuildName(int gameid, int channel, const std::string& raw_name) +{ + std::string guild_name = a8::XValue(gameid).GetString() + NAME_MAGIC_SYMBOL + raw_name; + return guild_name; +} diff --git a/server/rankserver/guildmgr.h b/server/rankserver/guildmgr.h index fee48cc..851863f 100644 --- a/server/rankserver/guildmgr.h +++ b/server/rankserver/guildmgr.h @@ -27,7 +27,7 @@ class GuildMgr : public a8::Singleton private: cs::MFGuildBasic* GetGuildById(long long guild_id); - cs::MFGuildBasic* GetGuildByName(int gameid, const std::string& guild_name); + cs::MFGuildBasic* GetGuildByName(int gameid, int channel, const std::string& guild_name); std::vector* GetGuildRank(int gameid); void AddGuild(cs::MFGuildBasic* guild); void LoadGuild(int instance_id, long long last_idx); @@ -40,6 +40,7 @@ class GuildMgr : public a8::Singleton void UpdateGuild(cs::MFGuildBasic* new_guild); bool CmpGuild(cs::MFGuildBasic* a, cs::MFGuildBasic* b); void InstallSyncGuildTimer(); + std::string GenGuildName(int gameid, int channel, const std::string& raw_name); private: a8::TimerAttacher timer_attacher_; diff --git a/server/rankserver/metamgr.cc b/server/rankserver/metamgr.cc index 9b18001..1254123 100644 --- a/server/rankserver/metamgr.cc +++ b/server/rankserver/metamgr.cc @@ -79,3 +79,8 @@ void MetaMgr::Reload() loader_ = new MetaDataLoader(); loader_->Load(); } + +bool MetaMgr::HasDirtyWord(const std::string& word) +{ + return false; +} diff --git a/server/rankserver/metamgr.h b/server/rankserver/metamgr.h index faa0fab..60bb93c 100644 --- a/server/rankserver/metamgr.h +++ b/server/rankserver/metamgr.h @@ -16,6 +16,8 @@ class MetaMgr : public a8::Singleton void UnInit(); void Reload(); + bool HasDirtyWord(const std::string& word); + private: MetaDataLoader* loader_ = nullptr;