This commit is contained in:
aozhiwei 2020-10-09 17:13:53 +08:00
parent 4765f1d8ed
commit eb6775aeb9
2 changed files with 40 additions and 4 deletions

View File

@ -1,5 +1,7 @@
#include "precompile.h"
#include <algorithm>
#include <a8/stringlist.h>
#include <a8/csvreader.h>
@ -18,12 +20,13 @@
class MetaDataLoader
{
public:
std::map<size_t, std::map<std::string, std::string> > 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<std::string, std::string> 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;
}

View File

@ -16,7 +16,7 @@ class MetaMgr : public a8::Singleton<MetaMgr>
void UnInit();
void Reload();
bool HasDirtyWord(const std::string& word);
bool HasDirtyWord(const std::string& text);
private:
MetaDataLoader* loader_ = nullptr;