添加名字功能

This commit is contained in:
aozhiwei 2021-12-06 11:42:21 +08:00
parent f51b66f84a
commit 1a1fe81447
6 changed files with 82 additions and 2 deletions

View File

@ -1,3 +1,8 @@
#pragma once
#include "metatable.pb.h"
namespace MetaData
{
}

View File

@ -34,8 +34,12 @@ class MetaDataLoader
public:
std::map<size_t, std::map<std::string, std::string> > dirty_words;
std::list<metatable::Text> text_meta_list;
std::list<metatable::Creator> creator_meta_list;
std::map<std::string, std::string> text_hash;
std::vector<std::string> name1_list;
std::vector<std::string> name2_list;
std::vector<std::string> name3_list;
void Load()
{
@ -59,6 +63,7 @@ public:
res_path = "../res/";
}
f8::ReadCsvMetaFile(res_path + "text@text.csv", text_meta_list);
f8::ReadCsvMetaFile(res_path + "creator@creator.csv", creator_meta_list);
LoadDirtyWordTable();
BindToMetaData();
Check();
@ -96,6 +101,11 @@ private:
for (auto& meta : text_meta_list) {
text_hash[meta.textid()] = meta.text();
}
for (auto& meta : creator_meta_list) {
name1_list.push_back(meta.adjective());
name2_list.push_back(meta.surname());
name3_list.push_back(meta.name());
}
}
private:
@ -176,3 +186,18 @@ std::string MetaMgr::GetText(const std::string& textid, const std::string& def_t
auto itr = loader_->text_hash.find(textid);
return itr != loader_->text_hash.end() ? itr->second : def_text;
}
std::string MetaMgr::RandName()
{
std::string name;
if (!loader_->name1_list.empty()) {
name += loader_->name1_list[rand() % loader_->name1_list.size()];
}
if (!loader_->name2_list.empty()) {
name += loader_->name2_list[rand() % loader_->name2_list.size()];
}
if (!loader_->name3_list.empty()) {
name += loader_->name3_list[rand() % loader_->name3_list.size()];
}
return name;
}

View File

@ -21,6 +21,7 @@ class MetaMgr : public a8::Singleton<MetaMgr>
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="");
std::string RandName();
private:
MetaDataLoader* loader_ = nullptr;

View File

@ -46,16 +46,57 @@ void TextMgr::__DirtyWordReplace(f8::JsonHttpRequest* request)
void TextMgr::__RandName(f8::JsonHttpRequest* request)
{
request->resp_xobj->SetVal("errcode", 0);
request->resp_xobj->SetVal("errmsg", "");
std::string name = MetaMgr::Instance()->RandName();
int try_count = 0;
while (try_count < 10) {
name = MetaMgr::Instance()->RandName();
if (MetaMgr::Instance()->HasDirtyWord(name)) {
break;
}
++try_count;
}
if (try_count >= 10) {
request->resp_xobj->SetVal("errcode", 1);
request->resp_xobj->SetVal("errmsg", "含有屏蔽字符,请重试");
} else {
std::string sign = Sign(name);
request->resp_xobj->SetVal("errcode", 0);
request->resp_xobj->SetVal("errmsg", "");
request->resp_xobj->SetVal("name", name);
request->resp_xobj->SetVal("name_sign", sign);
}
}
void TextMgr::__IsValidName(f8::JsonHttpRequest* request)
{
request->resp_xobj->SetVal("errcode", 0);
request->resp_xobj->SetVal("errmsg", "");
std::string name = request->request.At("name")->AsXValue();
std::string name = "";
if (MetaMgr::Instance()->HasDirtyWord(name)) {
request->resp_xobj->SetVal("errcode", 1);
request->resp_xobj->SetVal("errmsg", "含有屏蔽字符");
} else {
std::string sign = Sign(name);
request->resp_xobj->SetVal("errcode", 0);
request->resp_xobj->SetVal("errmsg", "");
request->resp_xobj->SetVal("name", name);
request->resp_xobj->SetVal("name_sign", sign);
}
}
std::string TextMgr::Sign(const std::string& name)
{
int rnd = rand();
std::string sign = a8::openssl::md5(name +
a8::XValue(App::Instance()->nowtime).GetString() +
a8::XValue(rnd).GetString());
sign = a8::Format("%s_%s_%s",
{
a8::XValue(App::Instance()->nowtime).GetString(),
a8::XValue(rnd).GetString(),
sign
});
return sign;
}

View File

@ -19,6 +19,7 @@ class TextMgr : public a8::Singleton<TextMgr>
void __IsValidName(f8::JsonHttpRequest* request);
private:
std::string Sign(const std::string& name);
private:
a8::TimerAttacher timer_attacher_;

View File

@ -11,3 +11,10 @@ message Text
optional string textid = 1;
optional string text = 2;
}
message Creator
{
optional string adjective = 1;
optional string surname = 2;
optional string name = 3;
}