38 changed files with 1603 additions and 1455 deletions
-
11README.md
-
40app_protocols/apperrorcode/apperrorcode.hpp
-
20app_protocols/appexception/appexception.hpp
-
2app_protocols/zscanprotocol
-
1appdep/components/uart_printer/uart_printer.hpp
-
3appdep/components/zservice_container/zservice_container.hpp
-
58appdep/iflytop/core/error/error_code.cpp
-
79appdep/iflytop/core/error/error_code.hpp
-
5appsrc/appbase/dep.hpp
-
4appsrc/appcomponents/app_errorcode_mgr/app_errorcode_mgr.hpp
-
4appsrc/appcomponents/canchannel/com/zscanprotocol_com.cpp
-
9appsrc/baseservice/baseservice.hpp
-
40appsrc/baseservice/db/db_service.cpp
-
9appsrc/baseservice/db/db_service.hpp
-
0appsrc/baseservice/db/user_behavior_des.cpp
-
0appsrc/baseservice/db/user_behavior_des.hpp
-
59appsrc/baseservice/devicestate/device_state_service.hpp
-
58appsrc/baseservice/front_msg_processer/front_msg_processer.cpp
-
33appsrc/baseservice/front_msg_processer/front_msg_processer.hpp
-
53appsrc/baseservice/iflytop_front_end_service/iflytop_front_end_service.cpp
-
0appsrc/baseservice/iflytop_front_end_service/iflytop_front_end_service.hpp
-
0appsrc/baseservice/iflytop_front_end_service/protocol.md
-
2appsrc/main.cpp
-
4appsrc/service/extapi/extapi_dep.hpp
-
0appsrc/service/extapi/user_mgr_service.cpp
-
29appsrc/service/extapi/user_mgr_service.hpp
-
22appsrc/service/front_msg_processer/front_msg_processer.cpp
-
31appsrc/service/main_control_service.cpp
-
82appsrc/service/user_mgr_service.cpp
-
34appsrc/service/user_mgr_service.hpp
@ -1 +1 @@ |
|||
Subproject commit 94c49f650f508e64b9e30e733dbb161c72ae2559 |
|||
Subproject commit d11d41c1062568f629d5ec2bc6435319b7ea83e3 |
@ -1,58 +0,0 @@ |
|||
#include "error_code.hpp"
|
|||
|
|||
namespace iflytop { |
|||
namespace err { |
|||
|
|||
using namespace std; |
|||
|
|||
typedef struct { |
|||
string errordesc; |
|||
} error_desc_t; |
|||
|
|||
static map<error_t, error_desc_t> errormap = { |
|||
// {kovertime, {.errordesc = "overtime"}},
|
|||
|
|||
{ksucc, {.errordesc = "ksucc"}}, |
|||
{kfail, {.errordesc = "kfail"}}, |
|||
{kce_subboard_error_overtime, {.errordesc = "kce_subboard_error_overtime"}}, |
|||
{kce_subboard_error_invalid_param, {.errordesc = "kce_subboard_error_invalid_param"}}, |
|||
{kce_subboard_error_invalid_param_num, {.errordesc = "kce_subboard_error_invalid_param_num"}}, |
|||
{kce_subboard_error_subdevice_offline, {.errordesc = "kce_subboard_error_subdevice_offline"}}, |
|||
{kce_subboard_error_function_not_support, {.errordesc = "kce_subboard_error_function_not_support"}}, |
|||
{kce_overtime, {.errordesc = "kce_overtime"}}, |
|||
{kce_noack, {.errordesc = "kce_noack"}}, |
|||
{kce_errorack, {.errordesc = "kce_errorack"}}, |
|||
{kce_device_offline, {.errordesc = "kce_device_offline"}}, |
|||
{kce_parse_json_err, {.errordesc = "kce_parse_json_err"}}, |
|||
{kdbe_user_not_exist, {.errordesc = "kdbe_user_not_exist"}}, |
|||
{kdbe_catch_exception, {.errordesc = "kdbe_catch_exception"}}, |
|||
{kharde_unfound, {.errordesc = "kharde_unfound"}}, |
|||
{kre_catch_exception, {.errordesc = "kre_catch_exception"}}, |
|||
{kinteraction_error_passwd_error, {.errordesc = "kinteraction_error_passwd_error"}}, |
|||
{kinteraction_error_user_not_exist, {.errordesc = "kinteraction_error_user_not_exist"}}, |
|||
{ksys_error, {.errordesc = "ksys_error"}}, |
|||
{ksys_create_file_error, {.errordesc = "ksys_create_file_error"}}, |
|||
{ksys_create_dir_error, {.errordesc = "ksys_create_dir_error"}}, |
|||
{ksys_open_file_error, {.errordesc = "ksys_open_file_error"}}, |
|||
{ksys_open_dir_error, {.errordesc = "ksys_open_dir_error"}}, |
|||
{ksys_read_file_error, {.errordesc = "ksys_read_file_error"}}, |
|||
{ksys_write_file_error, {.errordesc = "ksys_write_file_error"}}, |
|||
{ksys_close_file_error, {.errordesc = "ksys_close_file_error"}}, |
|||
{ksys_close_dir_error, {.errordesc = "ksys_close_dir_error"}}, |
|||
{ksys_delete_file_error, {.errordesc = "ksys_delete_file_error"}}, |
|||
{ksys_delete_dir_error, {.errordesc = "ksys_delete_dir_error"}}, |
|||
{ksys_copy_file_error, {.errordesc = "ksys_copy_file_error"}}, |
|||
|
|||
|
|||
}; |
|||
|
|||
std::string zecode2str(err::error_t error_type, string extdes) { |
|||
string ret = "unkown"; |
|||
if (errormap.find(error_type) != errormap.end()) { |
|||
ret = errormap[error_type].errordesc; |
|||
} |
|||
return fmt::format("{},{}", ret, extdes); |
|||
} |
|||
|
|||
} // namespace err
|
|||
} // namespace iflytop
|
@ -0,0 +1,9 @@ |
|||
#pragma once
|
|||
#include "appbase/dep.hpp"
|
|||
//
|
|||
#include "db/db_service.hpp"
|
|||
#include "devicestate/device_state_service.hpp"
|
|||
#include "front_msg_processer/front_msg_processer.hpp"
|
|||
#include "iflytop_front_end_service/iflytop_front_end_service.hpp"
|
|||
#include "appcomponents/app_errorcode_mgr/app_errorcode_mgr.hpp"
|
|||
#include "appcomponents/canchannel/transmit_disinfection_can_master.hpp"
|
@ -0,0 +1,59 @@ |
|||
//
|
|||
// Created by zwsd
|
|||
//
|
|||
|
|||
#pragma once
|
|||
#include <fstream>
|
|||
#include <iostream>
|
|||
#include <list>
|
|||
#include <map>
|
|||
#include <memory>
|
|||
#include <set>
|
|||
#include <sstream>
|
|||
#include <string>
|
|||
#include <vector>
|
|||
|
|||
#include "appbase/dep.hpp"
|
|||
|
|||
/**
|
|||
* @brief |
|||
* |
|||
* service: DeviceStateService |
|||
* |
|||
* 监听事件: |
|||
* 依赖状态: |
|||
* 依赖服务: |
|||
* 作用: |
|||
* |
|||
*/ |
|||
|
|||
namespace iflytop { |
|||
using namespace std; |
|||
using namespace core; |
|||
class DeviceStateService : public enable_shared_from_this<DeviceStateService> { |
|||
ENABLE_LOGGER(DeviceStateService); |
|||
|
|||
bool loginFlag = false; |
|||
bool m_isLoginAdmin = false; |
|||
string loginUid; |
|||
|
|||
public: |
|||
DeviceStateService() {}; |
|||
|
|||
void setLoginState(string uid, bool isadmin) { |
|||
loginFlag = true; |
|||
loginUid = uid; |
|||
m_isLoginAdmin = isadmin; |
|||
} |
|||
|
|||
void unlogin() { |
|||
loginFlag = false; |
|||
loginUid = ""; |
|||
} |
|||
bool isLogin() { return loginFlag; } |
|||
string getLoginUid() { return loginUid; } |
|||
bool isLoginAdmin() { return m_isLoginAdmin; } |
|||
|
|||
void initialize() {}; |
|||
}; |
|||
} // namespace iflytop
|
@ -0,0 +1,58 @@ |
|||
#include "front_msg_processer.hpp"
|
|||
|
|||
#include "appcomponents/app_errorcode_mgr/app_errorcode_mgr.hpp"
|
|||
#include "iflytop/core/error/error_code.hpp"
|
|||
|
|||
using namespace iflytop; |
|||
|
|||
// {
|
|||
// "messageId":"1234",
|
|||
// "timeStamp":1112312,
|
|||
// "messageType":"Command",
|
|||
// "className":"UserMgrService",
|
|||
// "fnName":"readAll",
|
|||
// "param":{
|
|||
// }
|
|||
// }
|
|||
|
|||
void FrontMsgProcesser::initialize() {} |
|||
|
|||
void FrontMsgProcesser::processMsg(shared_ptr<MsgProcessContext> cxt) { |
|||
string className = cxt->cmd["className"]; |
|||
string fnName = cxt->cmd["fnName"]; |
|||
string key = className + "." + fnName; |
|||
|
|||
string fn = className+ "." + fnName; |
|||
string param = cxt->cmd["param"].dump(); |
|||
|
|||
logger->info("call: {}->({})", fn, param); |
|||
|
|||
if (m_msgProcesserMap.find(key) != m_msgProcesserMap.end()) { |
|||
try { |
|||
m_msgProcesserMap[key]->fn(cxt); |
|||
if (int(cxt->receipt["ackcode"]) != 0) { |
|||
cxt->receipt["message"] = fmt::format("[{}],{}", ecode2str(cxt->receipt["ackcode"]), cxt->ackcodeExtMessage); |
|||
} |
|||
} catch (const appexception& e) { |
|||
logger->error("process {} error: {}", key, e.what()); |
|||
cxt->receipt["ackcode"] = e.ecode(); |
|||
cxt->receipt["message"] = fmt::format("[{}],{}", ecode2str(cxt->receipt["ackcode"]), e.what()); |
|||
} |
|||
} else { |
|||
logger->error("unknown command: {}", key); |
|||
cxt->receipt["ackcode"] = err::kappe_cmd_not_support; |
|||
cxt->receipt["message"] = fmt::format("[{}],未找到指令 {}", ecode2str(cxt->receipt["ackcode"]), key); |
|||
} |
|||
} |
|||
void FrontMsgProcesser::registerMsgProcesser(const string& className, const string fnName, MsgProcesserFn_t fn) { |
|||
string key = className + "." + fnName; |
|||
if (m_msgProcesserMap.find(key) != m_msgProcesserMap.end()) { |
|||
logger->warn("cmd {} already registered", key); |
|||
return; |
|||
} |
|||
shared_ptr<MsgProcesser> processer = make_shared<MsgProcesser>(); |
|||
processer->className = className; |
|||
processer->fnName = fnName; |
|||
processer->fn = fn; |
|||
m_msgProcesserMap[key] = processer; |
|||
} |
@ -1,4 +0,0 @@ |
|||
#pragma once
|
|||
#include "service/db/db_service.hpp"
|
|||
#include "service/iflytop_front_end_service/iflytop_front_end_service.hpp"
|
|||
#include "service/front_msg_processer/front_msg_processer.hpp"
|
@ -1,29 +0,0 @@ |
|||
#include <fstream>
|
|||
#include <iostream>
|
|||
#include <list>
|
|||
#include <map>
|
|||
#include <memory>
|
|||
#include <set>
|
|||
#include <sstream>
|
|||
#include <string>
|
|||
#include <vector>
|
|||
//
|
|||
#include "service/iflytop_front_end_service/iflytop_front_end_service.hpp"
|
|||
#include "service/front_msg_processer/front_msg_processer.hpp"
|
|||
#include "service/device_alert_dectector_service.hpp"
|
|||
namespace iflytop { |
|||
|
|||
class UserMgrService : public enable_shared_from_this<UserMgrService> { |
|||
ENABLE_LOGGER(UserMgrService); |
|||
|
|||
|
|||
|
|||
public: |
|||
UserMgrService(){}; |
|||
void initialize(){}; |
|||
|
|||
private: |
|||
|
|||
}; |
|||
|
|||
} // namespace iflytop
|
@ -1,22 +0,0 @@ |
|||
#include "front_msg_processer.hpp"
|
|||
#include "iflytop/core/error/error_code.hpp"
|
|||
|
|||
using namespace iflytop; |
|||
|
|||
void FrontMsgProcesser::initialize() {} |
|||
void FrontMsgProcesser::processMsg(json& cmd, json& receipt) { |
|||
string cmdstr = cmd["command"]; |
|||
if (m_msgProcesserMap.find(cmdstr) != m_msgProcesserMap.end()) { |
|||
m_msgProcesserMap[cmdstr](cmd, receipt); |
|||
} else { |
|||
logger->error("unknown command: {}", cmdstr); |
|||
receipt["ackcode"] = err::kfail; |
|||
} |
|||
} |
|||
void FrontMsgProcesser::registerMsgProcesser(const string& cmdName, MsgProcesserFn_t fn) { |
|||
if (m_msgProcesserMap.find(cmdName) != m_msgProcesserMap.end()) { |
|||
logger->warn("cmd {} already registered", cmdName); |
|||
return; |
|||
} |
|||
m_msgProcesserMap[cmdName] = fn; |
|||
} |
@ -0,0 +1,82 @@ |
|||
#include "user_mgr_service.hpp"
|
|||
|
|||
using namespace iflytop; |
|||
using namespace std; |
|||
using namespace core; |
|||
|
|||
void UserMgrService::initialize() { |
|||
GET_TO_SERVICE(m_db); |
|||
GET_TO_SERVICE(m_deviceStateService); |
|||
|
|||
REGFN(UserMgrService, login); |
|||
REGFN(UserMgrService, unlogin); |
|||
REGFN(UserMgrService, chpasswd); |
|||
REGFN(UserMgrService, addUser); |
|||
REGFN(UserMgrService, delUser); |
|||
REGFN(UserMgrService, updateUserUid); |
|||
REGFN(UserMgrService, getAllUser); |
|||
}; |
|||
|
|||
void UserMgrService::login(shared_ptr<MsgProcessContext> cxt) { |
|||
string uid = cxt->cmd["param"]["uid"]; |
|||
string pwd = cxt->cmd["param"]["passwd"]; |
|||
|
|||
// 超超级用户
|
|||
if (uid == "admin" && pwd == "iflytop9973") { |
|||
m_deviceStateService->setLoginState("admin", true); |
|||
logger->info("user {} login success", "admin"); |
|||
return; |
|||
} |
|||
|
|||
if (!m_db->isUserExist(uid)) //
|
|||
throw appexception(err::kappe_user_not_exist, fmt::format("user {} not exist", uid)); |
|||
if (!m_db->ispasswdCorrect(uid, pwd)) //
|
|||
throw appexception(err::kappe_passwd_error, fmt::format("user {} passwd error", uid)); |
|||
|
|||
m_deviceStateService->setLoginState(uid, m_db->getUser(uid)->is_admin); |
|||
logger->info("user {} login success", uid); |
|||
ADD_USER_BEHAVIOR(uid, kbehavior_login, ""); |
|||
return; |
|||
} |
|||
void UserMgrService::unlogin(shared_ptr<MsgProcessContext> cxt) { |
|||
string loginuid = m_deviceStateService->getLoginUid(); |
|||
m_deviceStateService->unlogin(); |
|||
logger->info("user unlogin success"); |
|||
ADD_USER_BEHAVIOR(loginuid, kbehavior_logout, ""); |
|||
return; |
|||
} |
|||
void UserMgrService::chpasswd(shared_ptr<MsgProcessContext> cxt) { |
|||
string uid = cxt->cmd["param"]["uid"]; |
|||
string newpasswd = cxt->cmd["param"]["newpasswd"]; |
|||
string passwd = cxt->cmd["param"]["passwd"]; |
|||
|
|||
if (!m_deviceStateService->isLoginAdmin()) { |
|||
APPCHECK(!m_db->ispasswdCorrect(uid, passwd), err::kappe_passwd_error, fmt::format("user {} passwd error", uid)); |
|||
} |
|||
|
|||
logger->info("changet passwd {} {}", uid, passwd); |
|||
auto user = m_db->changePasswd(uid, newpasswd); |
|||
} |
|||
void UserMgrService::addUser(shared_ptr<MsgProcessContext> cxt) { |
|||
string uid = cxt->cmd["param"]["uid"]; |
|||
string passwd = cxt->cmd["param"]["passwd"]; |
|||
m_db->addUser(uid, passwd); |
|||
} |
|||
void UserMgrService::delUser(shared_ptr<MsgProcessContext> cxt) { |
|||
int id = jsonGet<int>(cxt->cmd["param"]["id"]); |
|||
auto user = m_db->delUser(id); |
|||
APPCHECK(!user, err::kappe_user_not_exist, fmt::format("user {} not exist", id)); |
|||
} |
|||
|
|||
void UserMgrService::updateUserUid(shared_ptr<MsgProcessContext> cxt) { |
|||
int id = jsonGet<int>(cxt->cmd["param"]["id"]); |
|||
string uid = cxt->cmd["param"]["uid"]; |
|||
string olduid; |
|||
auto user = m_db->updateUserUid(id, uid, olduid); |
|||
APPCHECK(!user, err::kappe_user_not_exist, fmt::format("user {} not exist", id)); |
|||
} |
|||
void UserMgrService::getAllUser(shared_ptr<MsgProcessContext> cxt) { |
|||
auto users = m_db->getAllUserJson(); |
|||
cxt->receipt["content"] = users; |
|||
return; |
|||
} |
@ -0,0 +1,34 @@ |
|||
#pragma once
|
|||
#include <fstream>
|
|||
#include <iostream>
|
|||
#include <list>
|
|||
#include <map>
|
|||
#include <memory>
|
|||
#include <set>
|
|||
#include <sstream>
|
|||
#include <string>
|
|||
#include <vector>
|
|||
//
|
|||
#include "baseservice/baseservice.hpp"
|
|||
namespace iflytop { |
|||
class UserMgrService : public enable_shared_from_this<UserMgrService> { |
|||
ENABLE_LOGGER(UserMgrService); |
|||
|
|||
shared_ptr<DBService> m_db; |
|||
shared_ptr<DeviceStateService> m_deviceStateService; |
|||
|
|||
public: |
|||
UserMgrService() {} |
|||
void initialize(); |
|||
|
|||
private: |
|||
void login(shared_ptr<MsgProcessContext> cxt); |
|||
void unlogin(shared_ptr<MsgProcessContext> cxt); |
|||
void chpasswd(shared_ptr<MsgProcessContext> cxt); |
|||
void addUser(shared_ptr<MsgProcessContext> cxt); |
|||
void delUser(shared_ptr<MsgProcessContext> cxt); |
|||
void updateUserUid(shared_ptr<MsgProcessContext> cxt); |
|||
void getAllUser(shared_ptr<MsgProcessContext> cxt); |
|||
}; |
|||
|
|||
} // namespace iflytop
|
Write
Preview
Loading…
Cancel
Save
Reference in new issue