// // Created by zx on 2020/7/14. // /* * 指令管理, 包括指令的接收,指令的执行控制,指令的状态追踪,出入口状态检查 */ #ifndef NNXX_TESTS_COMMAND_MANAGER_H #define NNXX_TESTS_COMMAND_MANAGER_H #include #include #include #include "thread_condition.h" #include "singleton.h" #include "TaskQueue/TQFactory.h" #include "TaskQueue/BaseTask.h" #include "central_control_message.pb.h" #include "thread_safe_map.h" #include "system_setting.pb.h" class Command_manager :public Singleton{ friend Singleton; enum Entrance_statu { Enable=0, Disable }; public: ~Command_manager(); /* * 初始化函数,创建线程池,创建状态广播线程,根据配置创建停取车流程 */ Error_manager init(setting::System_setting system_setting); /* * 执行停车请求 */ Error_manager execute_store_command(message::Store_command_request_msg& request,message::Store_command_response_msg& response); /* * 执行取车请求 */ Error_manager execute_pickup_command(message::Pickup_command_request_msg& request,message::Pickup_command_response_msg& response); /* * 控制入口 开放或者关闭 */ Error_manager enable_entrance(int terminal_id,bool enable); /* * 控制出口 开放或者关闭 */ Error_manager enable_export(int terminal_id,bool enable); /* * pause,系统急停,急停状态下不允许自动流程的指令执行,允许管理员手动指令执行 */ void pause_system(); private: Command_manager(); static void publish_statu_function(Command_manager* commander); void publish_statu(); protected: tq::IQueue* m_thread_queue_process; //指令流程线程池 bool m_system_paused; std::vector m_input_entrance_statu; //入口状态(关闭/开放) std::vector m_output_entrance_statu; //出口状态(关闭/开放) setting::System_setting m_system_setting; std::thread* m_publish_statu_thread; //广播状态线程 Thread_condition m_publish_exit_condition; //发送的条件变量 }; #endif //NNXX_TESTS_COMMAND_MANAGER_H