1
This commit is contained in:
parent
8f79147f93
commit
a7001bb2c9
@ -552,6 +552,15 @@ void GuildMgr::__GuildDirtyWordCheck(f8::JsonHttpRequest* request)
|
||||
}
|
||||
}
|
||||
|
||||
void GuildMgr::__GuildDirtyWordReplace(f8::JsonHttpRequest* request)
|
||||
{
|
||||
std::string text = request->request.At("text")->AsXValue();
|
||||
std::string new_text = MetaMgr::Instance()->ReplaceDirtyWord(text, '*');
|
||||
request->resp_xobj->SetVal("errcode", 0);
|
||||
request->resp_xobj->SetVal("errmsg", "");
|
||||
request->resp_xobj->SetVal("new_text", new_text);
|
||||
}
|
||||
|
||||
void GuildMgr::__GenTestData(f8::JsonHttpRequest* request)
|
||||
{
|
||||
}
|
||||
|
@ -26,6 +26,7 @@ class GuildMgr : public a8::Singleton<GuildMgr>
|
||||
void __GuildRank(f8::JsonHttpRequest* request);
|
||||
void __GuildConfirmed(f8::JsonHttpRequest* request);
|
||||
void __GuildDirtyWordCheck(f8::JsonHttpRequest* request);
|
||||
void __GuildDirtyWordReplace(f8::JsonHttpRequest* request);
|
||||
void __GenTestData(f8::JsonHttpRequest* request);
|
||||
|
||||
private:
|
||||
|
@ -65,6 +65,11 @@ void HandlerMgr::Init()
|
||||
{
|
||||
GuildMgr::Instance()->__GuildDirtyWordCheck(request);
|
||||
});
|
||||
RegisterGMMsgHandler("Guild@dirtyWordReplace",
|
||||
[] (f8::JsonHttpRequest* request)
|
||||
{
|
||||
GuildMgr::Instance()->__GuildDirtyWordReplace(request);
|
||||
});
|
||||
RegisterGMMsgHandler("Guild@genTestData",
|
||||
[] (f8::JsonHttpRequest* request)
|
||||
{
|
||||
|
@ -17,6 +17,18 @@
|
||||
#define METAMGR_READ_STR(field_name, def_val) MetaMgr::Instance()->field_name = \
|
||||
a8::XValue(MetaMgr::Instance()->GetSysParamAsString(#field_name, def_val)).GetString();
|
||||
|
||||
static bool PureEnglishName(const std::string& role_name)
|
||||
{
|
||||
for (size_t i = 0; i < role_name.size(); i++) {
|
||||
if (role_name[i] >= 0 && role_name[i] <= 127) {
|
||||
continue;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
class MetaDataLoader
|
||||
{
|
||||
public:
|
||||
@ -130,6 +142,37 @@ bool MetaMgr::HasDirtyWord(const std::string& text)
|
||||
return false;
|
||||
}
|
||||
|
||||
std::string MetaMgr::ReplaceDirtyWord(const std::string& text, char c)
|
||||
{
|
||||
std::string result;
|
||||
result.reserve(text.size());
|
||||
for (size_t i = 0; i < text.size(); i++) {
|
||||
bool found = false;
|
||||
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);
|
||||
// 如果是纯英文,则先转为小写,根据策划说明,屏蔽字大小写不敏感
|
||||
if (PureEnglishName(substr)) {
|
||||
transform(substr.begin(), substr.end(), substr.begin(), ::tolower);
|
||||
}
|
||||
if (substr.size() > 0 && itr->second.find(substr) != itr->second.end()) {
|
||||
int str_len = a8::GetUtf8Length(substr.c_str());
|
||||
for (int j = 0; j < str_len; j++) {
|
||||
result.push_back(c);
|
||||
}
|
||||
i += substr.size() - 1;
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}//endfor map
|
||||
if (!found) {
|
||||
result.push_back(text[i]);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
std::string MetaMgr::GetText(const std::string& textid, const std::string& def_text)
|
||||
{
|
||||
auto itr = loader_->text_hash.find(textid);
|
||||
|
@ -19,6 +19,7 @@ class MetaMgr : public a8::Singleton<MetaMgr>
|
||||
void Reload();
|
||||
|
||||
bool HasDirtyWord(const std::string& text);
|
||||
std::string ReplaceDirtyWord(const std::string& text, char c);
|
||||
std::string GetText(const std::string& textid, const std::string& def_text="");
|
||||
|
||||
private:
|
||||
|
Loading…
x
Reference in New Issue
Block a user