// // Created by huli on 2020/7/2. // #ifndef NNXX_TESTS_SYSTEM_EXECUTOR_H #define NNXX_TESTS_SYSTEM_EXECUTOR_H #include "../tool/thread_pool.h" #include "../tool/singleton.h" #include "../tool/pathcreator.h" #include "../error_code/error_code.h" #include "../communication/communication_message.h" #include "../tool/common_data.h" #include "../tool/measure_filter.h" #include "../message/measure_message.pb.h" #include "../message/message.pb.h" #include "../system/system_communication.h" #include "../system/system_communication_mq.h" #include "../wanji_lidar/wanji_manager.h" #include "../velodyne_lidar/velodyne_manager.h" #define DISP_TERM_ID -1 // 0wj 1velo 2both #define WJ_VELO 2 class System_executor:public Singleton { // 子类必须把父类设定为友元函数,这样父类才能使用子类的私有构造函数。 friend class Singleton; public: //系统执行者的状态 enum System_executor_status {//default SYSTEM_EXECUTOR_UNKNOW = 0 SYSTEM_EXECUTOR_UNKNOW = 0, // SYSTEM_EXECUTOR_READY = 1, // SYSTEM_EXECUTOR_FAULT = 10, // }; private: // 父类的构造函数必须保护,子类的构造函数必须私有。 System_executor(); public: //必须关闭拷贝构造和赋值构造,只能通过 get_instance 函数来进行操作唯一的实例。 System_executor(const System_executor& other) = delete; System_executor& operator =(const System_executor& other) = delete; ~System_executor(); public://API functions //初始化 Error_manager system_executor_init(int threads_size, int terminal_id); //反初始化 Error_manager system_executor_uninit(); //检查消息是否有效, 主要检查消息类型和接受者, 判断这条消息是不是给我的. Error_manager check_msg(Communication_message* p_msg); //检查执行者的状态, 判断能否处理这条消息, Error_manager check_executer(Communication_message* p_msg); //处理消息的执行函数 Error_manager execute_msg(Communication_message* p_msg); //检查状态 Error_manager check_status(); //定时发送状态信息 Error_manager encapsulate_send_status(); //定时发送mq状态信息 Error_manager encapsulate_send_mq_status(); //判断是否为待机,如果已经准备好,则可以执行任务。 bool is_ready(); int transMeasureStatus(const int &statu); // 更新消息中关于定位结果与超界信息的内容 bool update_measure_info(message::Ground_status_msg &msg, Common_data::Car_wheel_information &measure_info, int cloud_size); // 更新消息中关于终端的定位结果与超界信息的内容 bool update_terminal_measure_info(message::Ground_status_msg &msg, Common_data::Car_wheel_information &measure_info, int cloud_size); public://get or set member variable System_executor_status get_system_executor_status(); int get_terminal_id(); public: //注注注注注意了, 线程池的函数独立运行, //传递参数, 不能使用即将销毁的内存 //雷达感测定位 的处理函数 //input::command_id, 消息指令id, 由主控制系统生成的唯一码 //input::command_id, 终端id, 对应具体的某个车位 //return::void, 没有返回, 执行结果直接生成一条答复消息, 然后通过通信返回 void execute_for_measure(std::string command_info, int terminal_id,std::chrono::system_clock::time_point receive_time); protected://member variable System_executor_status m_system_executor_status; //系统执行者的状态 Thread_pool m_thread_pool; //执行多任务的线程池 int m_terminal_id; //终端id private: }; #endif //NNXX_TESTS_SYSTEM_EXECUTOR_H