From eb6775aeb94e2632ac34d51e61b812ef52e128a7 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Fri, 9 Oct 2020 17:13:53 +0800 Subject: [PATCH] 1 --- server/rankserver/metamgr.cc | 42 +++++++++++++++++++++++++++++++++--- server/rankserver/metamgr.h | 2 +- 2 files changed, 40 insertions(+), 4 deletions(-) diff --git a/server/rankserver/metamgr.cc b/server/rankserver/metamgr.cc index 1254123..c954691 100644 --- a/server/rankserver/metamgr.cc +++ b/server/rankserver/metamgr.cc @@ -1,5 +1,7 @@ #include "precompile.h" +#include + #include #include @@ -18,12 +20,13 @@ class MetaDataLoader { public: + std::map > dirty_words; void Load() { if (!f8::IsOnlineEnv()) { if (f8::IsTestEnv()) { - res_path = a8::Format("/root/pub/%d/%d/conf_test/game%d/gameserver.test/res%d/", + res_path = a8::Format("/root/pub/%d/%d/conf_test/game%d/rankserver.test/res%d/", { GAME_ID, App::Instance()->instance_id, @@ -31,7 +34,7 @@ public: App::Instance()->instance_id }); } else { - res_path = a8::Format("/root/pub/%d/%d/conf_test/game%d/gameserver.dev/res%d/", + res_path = a8::Format("/root/pub/%d/%d/conf_test/game%d/rankserver.dev/res%d/", { GAME_ID, App::Instance()->instance_id, @@ -42,11 +45,32 @@ public: } else { res_path = "../res/"; } + LoadDirtyWordTable(); Check(); } private: + void LoadDirtyWordTable() + { + a8::CsvReader reader; + reader.Load(res_path + "dirtyWorld.csv"); + while (reader.NextLine()) { + std::string strword = reader.GetValue("word").GetString(); + if (strword == " " || strword.empty()) { //忽略空格 + continue; + } + auto itr = dirty_words.find(strword.size()); + if (dirty_words.find(strword.size()) != dirty_words.end()) { + itr->second[strword] = strword; + } else { + std::map words; + words[strword] = strword; + dirty_words[strword.size()] = words; + } + } + } + void Check() { } @@ -80,7 +104,19 @@ void MetaMgr::Reload() loader_->Load(); } -bool MetaMgr::HasDirtyWord(const std::string& word) +bool MetaMgr::HasDirtyWord(const std::string& text) { + for (size_t i = 0; i < text.size(); i++) { + for (auto itr = loader_->dirty_words.begin(); itr != loader_->dirty_words.end(); ++itr) { + if (itr->first <= text.size() - i) { + std::string substr = text.substr(i, itr->first); + // 如果是纯英文,则先转为小写,根据策划说明,屏蔽字大小写不敏感 + std::transform(substr.begin(), substr.end(), substr.begin(), ::tolower); + if (substr.size() > 0 && itr->second.find(substr) != itr->second.end()) { + return true; + } + } + } + } return false; } diff --git a/server/rankserver/metamgr.h b/server/rankserver/metamgr.h index 60bb93c..0eeb035 100644 --- a/server/rankserver/metamgr.h +++ b/server/rankserver/metamgr.h @@ -16,7 +16,7 @@ class MetaMgr : public a8::Singleton void UnInit(); void Reload(); - bool HasDirtyWord(const std::string& word); + bool HasDirtyWord(const std::string& text); private: MetaDataLoader* loader_ = nullptr;