// // Created by zx on 2020/8/20. // #ifndef NNXX_TESTS_ERROR_HANDLING_H #define NNXX_TESTS_ERROR_HANDLING_H #include "communication_socket_base.h" #include "singleton.h" #include "manual_operation_message.pb.h" #include "error_code.h" #include "thread_safe_map.h" #include "StoreProcessTask.h" #include "PickupProcessTask.h" class Exception_solver :public Singleton, public Communication_socket_base { friend Singleton; public: virtual ~Exception_solver(); /* * 添加流程的任务取消标志位 * license:车牌号,作为流程任务的唯一标识 */ Error_manager add_task_cancel_condition(std::string license,Process_task* task); /* * 删除流程的任务取消标志位 * license:车牌号,作为流程任务的唯一标识 */ Error_manager delete_task_cancel_condition(std::string license); /* * 处理故障 */ Error_manager solve_exception(Error_manager code,Process_task* task); /* * 等待手动消息 */ Error_manager waitfor_manual_operate_msg(Process_task* task,message::Manual_operation_msg msg); protected: Exception_solver(); virtual Error_manager encapsulate_msg(Communication_message* message); virtual Error_manager execute_msg(Communication_message* p_msg); /* * 检测消息是否可被处理 */ virtual Error_manager check_msg(Communication_message* p_msg); /* * 心跳发送函数,重载 */ virtual Error_manager encapsulate_send_data(); //检查消息是否可以被解析, 需要重载 virtual Error_manager check_executer(Communication_message* p_msg); private: thread_safe_map m_ptask_map; thread_safe_map m_manual_msg_map; }; #endif //NNXX_TESTS_ERROR_HANDLING_H