添加名字功能
This commit is contained in:
parent
f51b66f84a
commit
1a1fe81447
@ -1,3 +1,8 @@
|
||||
#pragma once
|
||||
|
||||
#include "metatable.pb.h"
|
||||
|
||||
namespace MetaData
|
||||
{
|
||||
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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_;
|
||||
|
@ -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;
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user