#ifndef MODULE_CALL_HELP_H #define MODULE_CALL_HELP_H /** *@brief 呼救模块 * 把呼救消息保存到数据库,同时推送给web * @author 戴月腾 * @date 2018-08-09 */ #include #include #include #include #include #include "module_web.h" #include "module_const.h" /** * @brief 呼救类 * 把呼救消息保存到数据库,同时推送给web, 单例 */ class module_call_help : public i_thread, public singleton_base { private: friend class singleton_base; module_call_help() { } public: /** * @brief 接收到呼救请求 */ void rev_help(std::shared_ptr card_ptr) { // if(ES_START != card_ptr->m_stat_call_help) // { // card_ptr->m_stat_call_help = ES_START; // //保存到数据库 // auto ev_ptr = tool_other::create_event(OT_CARD, card_ptr->m_id, ET_CARD_HELP); // tool_other::copy_event(card_ptr, ev_ptr); //// ev_ptr->status = ES_START; //// ev_ptr->cur_time = std::chrono::system_clock::now(); // //保存到数据库 // tool_db::save_event(ev_ptr); // //转发给web // swsClientMgr.send(JSON_CMD_VALUE_PUSH, tool_json::ev_to_json(ev_ptr)); // std::lock_guard lock(_mutex); // tool_other::insert_event(ev_ptr, _map); // } } /** * @brief 接收到web端发来的处理呼救请求 * @param data_map */ void accept_deal_help(std::map data_map) { // uint32_t cardid = data_map[JSON_KEY_ID]->get_int(); // //uint64_t ev_id = data_map[JSON_KEY_EVENT_EVENT_ID]->get_int(); // auto card_ptr = card_list::instance()->get(tool_other::to_uint64_cardid(CT_PERSON, cardid)); // if(card_ptr) // { // card_ptr->m_stat_call_help = ES_DEAL_HELP; // std::lock_guard lock(_mutex); // auto ev_ptr = tool_other::find_event(cardid, ET_CARD_HELP, _map); // if(ev_ptr) // { // ev_ptr->m_status = ES_DEAL_HELP; // tool_db::save_event(ev_ptr); // } // } //// else //// { //// std::lock_guard lock(_mutex); //// _map.erase(ev_id); //// } } /** * @brief web前端有用户登录时,反馈给web所有信息 */ std::string response_login() { std::vector> arr; get_all_events(arr); if(!arr.empty())//发送给web端 { return tool_json::evs_to_json(arr); } return ""; } /** * @brief 读取数据库中的告警,初始化告警列表 */ void init() {} private: /** * @brief 线程函数 */ void run() { std::vector> arr; get_all_events(arr); if(!arr.empty())//发送给web端 { swsClientMgr.send(JSON_CMD_VALUE_PUSH, tool_json::evs_to_json(arr)); } } /** * @brief 获取所有的告警事件 * @param out_data */ void get_all_events(std::vector>& arr) { { std::lock_guard lock(_mutex); auto it_map = _map.begin(); for(;it_map!=_map.end();++it_map) { arr.push_back(it_map->second); if(ES_DEAL_HELP== it_map->second->m_status)//删除掉已经处理的 { _map.erase(it_map--); } } } } std::map> _map; }; #endif