#include "LogicSystem.h"#include "HttpConnection.h"#include "VerifyGrpcClient.h"#include "StatusGrpcClient.h"#include "RedisMgr.h"#include "MysqlMgr.h"void LogicSystem::RegGet(std::string url, HttpHandler handler) {_get_handler.insert(make_pair(url, handler));}void LogicSystem::RegPost(std::string url, HttpHandler handler) {_post_handler.insert(make_pair(url, handler));}LogicSystem::LogicSystem() {//开始注册RegGet("/get_test", [](std::shared_ptr<HttpConnection> connection) {beast::ostream(connection->_response.body()) << "receive get_test req";int i = 0;for (auto& elem : connection->_get_params) {i++;beast::ostream(connection->_response.body()) << "parma " <<i << elem.first << "=" << elem.second;}});RegPost("/get_varifycode", [](std::shared_ptr<HttpConnection> connection) {auto body_str =boost::beast::buffers_to_string(connection->_request.body().data());std::cout << "body is " << body_str << std::endl;//回执connection->_response.set(http::field::content_type, "text/json");Json::Value root;Json::Reader reader;Json::Value src_root;bool parse_success = reader.parse(body_str, src_root);if (!parse_success) {std::cout << "Failed to parse Json data" << std::endl;root["error"] = ErrorCodes::Error_Json;std::string jsonStr = root.toStyledString();beast::ostream(connection->_response.body()) << jsonStr;return true;}if (!src_root.isMember("email")) {// key 不存在std::cout << "email not exsits" << std::endl;root["error"] = ErrorCodes::Error_Json;std::string jsonStr = root.toStyledString();beast::ostream(connection->_response.body()) << jsonStr;return true;}//从验证服务发请求校验是否合法//发送邮件auto email = src_root["email"].asString();//通过我们定义的验证码服务去获得一个已经我们protobuf编译后的对象GetVarifyRsp rsp = VerifyGrpcClient::GetInstance()->GetVarifyCode(email);root["error"] = rsp.error();root["email"] = src_root["email"];std::string jsonStr = root.toStyledString();beast::ostream(connection->_response.body()) << jsonStr;return true;});//注册用户信息RegPost("/user_register", [](std::shared_ptr<HttpConnection> connection) {auto body_str = boost::beast::buffers_to_string(connection->_request.body().data());std::cout << "receive body is " << body_str << std::endl;connection->_response.set(http::field::content_type, "text/json");Json::Value root;Json::Reader reader;Json::Value src_root;bool parse_success = reader.parse(body_str, src_root);if (!parse_success) {std::cout << "Failed to parse JSON data!" << std::endl;root["error"] = ErrorCodes::Error_Json;std::string jsonstr = root.toStyledString();beast::ostream(connection->_response.body()) << jsonstr;return true;}auto email = src_root["email"].asString();auto name = src_root["user"].asString();auto pwd = src_root["passwd"].asString();auto confirm = src_root["confirm"].asString();if (pwd != confirm) {std::cout << "password err " << std::endl;root["error"] = ErrorCodes::PasswdErr;std::string jsonstr = root.toStyledString();beast::ostream(connection->_response.body()) << jsonstr;return true;}//先查找redis中email对应的验证码是否合理std::string varify_code;std::string rk = CODEPREFIX + src_root["email"].asString();bool b_get_varify = RedisMgr::GetInstance()->Get(rk, varify_code);if (!b_get_varify) {std::cout << " get varify code expired" << std::endl;root["error"] = ErrorCodes::VarifyExpired;std::string jsonstr = root.toStyledString();beast::ostream(connection->_response.body()) << jsonstr;return true;}if (varify_code != src_root["varifycode"].asString()) {std::cout << " varify code error" << std::endl;root["error"] = ErrorCodes::VarifyCodeErr;std::string jsonstr = root.toStyledString();beast::ostream(connection->_response.body()) << jsonstr;return true;}//访问redis查找/*bool b_usr_exist = RedisMgr::GetInstance()->ExistsKey(src_root["user"].asString());if (b_usr_exist) {std::cout << " user exist" << std::endl;root["error"] = ErrorCodes::UserExist;std::string jsonstr = root.toStyledString();beast::ostream(connection->_response.body()) << jsonstr;return true;}*///查找数据库判断用户是否存在int uid = MysqlMgr::GetInstance()->RegUser(name, email, pwd);if (uid == 0 || uid == -1) {std::cout << " user or email exist" << std::endl;root["error"] = ErrorCodes::UserExist;std::string jsonstr = root.toStyledString();beast::ostream(connection->_response.body()) << jsonstr;return true;}root["error"] = 0;root["email"] = email;root["user"] = name;root["passwd"] = pwd;root["confirm"] = confirm;root["varifycode"] = src_root["varifycode"].asString();std::string jsonstr = root.toStyledString();beast::ostream(connection->_response.body()) << jsonstr;return true;});//重置回调逻辑RegPost("/reset_pwd", [](std::shared_ptr<HttpConnection> connection) {auto body_str = boost::beast::buffers_to_string(connection->_request.body().data());std::cout << "receive body is " << body_str << std::endl;connection->_response.set(http::field::content_type, "text/json");Json::Value root;Json::Reader reader;Json::Value src_root;bool parse_success = reader.parse(body_str, src_root);if (!parse_success) {std::cout << "Failed to parse JSON data!" << std::endl;root["error"] = ErrorCodes::Error_Json;std::string jsonstr = root.toStyledString();beast::ostream(connection->_response.body()) << jsonstr;return true;}auto email = src_root["email"].asString();auto name = src_root["user"].asString();auto pwd = src_root["passwd"].asString();//先查找redis中email对应的验证码是否合理std::string varify_code;bool b_get_varify = RedisMgr::GetInstance()->Get(CODEPREFIX + src_root["email"].asString(), varify_code);if (!b_get_varify) {std::cout << " get varify code expired" << std::endl;root["error"] = ErrorCodes::VarifyExpired;std::string jsonstr = root.toStyledString();beast::ostream(connection->_response.body()) << jsonstr;return true;}if (varify_code != src_root["varifycode"].asString()) {std::cout << " varify code error" << std::endl;root["error"] = ErrorCodes::VarifyCodeErr;std::string jsonstr = root.toStyledString();beast::ostream(connection->_response.body()) << jsonstr;return true;}//查询数据库判断用户名和邮箱是否匹配bool email_valid = MysqlMgr::GetInstance()->CheckEmail(name, email);if (!email_valid) {std::cout << " user email not match" << std::endl;root["error"] = ErrorCodes::EmailNotMatch;std::string jsonstr = root.toStyledString();beast::ostream(connection->_response.body()) << jsonstr;return true;}//更新密码为最新密码bool b_up = MysqlMgr::GetInstance()->UpdatePwd(name, pwd);if (!b_up) {std::cout << " update pwd failed" << std::endl;root["error"] = ErrorCodes::PasswdUpFailed;std::string jsonstr = root.toStyledString();beast::ostream(connection->_response.body()) << jsonstr;return true;}std::cout << "succeed to update password" << pwd << std::endl;root["error"] = 0;root["email"] = email;root["user"] = name;root["passwd"] = pwd;root["varifycode"] = src_root["varifycode"].asString();std::string jsonstr = root.toStyledString();beast::ostream(connection->_response.body()) << jsonstr;return true;});//用户登录逻辑RegPost("/user_login", [](std::shared_ptr<HttpConnection> connection) {auto body_str = boost::beast::buffers_to_string(connection->_request.body().data());std::cout << "receive body is " << body_str << std::endl;connection->_response.set(http::field::content_type, "text/json");Json::Value root;Json::Reader reader;Json::Value src_root;bool parse_success = reader.parse(body_str, src_root);if (!parse_success) {std::cout << "Failed to parse JSON data!" << std::endl;root["error"] = ErrorCodes::Error_Json;std::string jsonstr = root.toStyledString();beast::ostream(connection->_response.body()) << jsonstr;return true;}auto email = src_root["email"].asString();auto pwd = src_root["passwd"].asString();UserInfo userInfo;//查询数据库判断用户名和密码是否匹配bool pwd_valid = MysqlMgr::GetInstance()->CheckPwd(email, pwd, userInfo);if (!pwd_valid) {std::cout << " user pwd not match" << std::endl;root["error"] = ErrorCodes::PasswdInvalid;std::string jsonstr = root.toStyledString();beast::ostream(connection->_response.body()) << jsonstr;return true;}//查询StatusServer找到合适的连接auto reply = StatusGrpcClient::GetInstance()->GetChatServer(userInfo.uid);if (reply.error()) {std::cout << " grpc get chat server failed, error is " << reply.error() << std::endl;root["error"] = ErrorCodes::RPCFailed;std::string jsonstr = root.toStyledString();beast::ostream(connection->_response.body()) << jsonstr;return true;}std::cout << "succeed to load userinfo uid is " << userInfo.uid << std::endl;root["error"] = 0;root["email"] = email;root["uid"] = userInfo.uid;root["token"] = reply.token();root["host"] = reply.host();root["port"] = reply.port();std::string jsonstr = root.toStyledString();beast::ostream(connection->_response.body()) << jsonstr;return true;});}bool LogicSystem::HandleGet(std::string url, std::shared_ptr<HttpConnection> connection) {if (_get_handler.find(url) == _get_handler.end()) {//没找到return false;}_get_handler[url](connection);return true;}bool LogicSystem::HandlePost(std::string url, std::shared_ptr<HttpConnection> connection) {if (_post_handler.find(url) == _post_handler.end()) {//没找到return false;}_post_handler[url](connection);return true;}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。