// // Created by zx on 2020/7/14. // /* * 指令管理, 包括指令的接收,指令的执行控制,指令的状态追踪,出入口状态 */ #ifndef NNXX_TESTS_COMMAND_MANAGER_H #define NNXX_TESTS_COMMAND_MANAGER_H #include #include #include #include #include "thread_condition.h" #include "singleton.h" #include "TaskQueue/TQFactory.h" #include "process_message.pb.h" class Command_manager :public Singleton{ friend Singleton; public: ~Command_manager(); /* * 初始化函数,创建线程池,创建状态广播线程, */ Error_manager init(); /* * 执行停车请求 */ 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); /* * 更新状态 */ void updata_store_entrance_statu(int command_id,message::Entrance_statu statu); void updata_pickup_entrance_statu(int command_id,message::Entrance_statu statu); private: Command_manager(); static void publish_thread_func(Command_manager* p_commander); void publish_status(); protected: std::thread* m_publish_statu_thread; //广播状态线程 Thread_condition m_publish_exit_condition; //发送的条件变量 std::mutex m_entrance_msg_lock; message::Entrance_statu_msg m_entrance_status; //出入口状态 tq::IQueue* m_thread_queue_process; //指令流程线程池 }; #endif //NNXX_TESTS_COMMAND_MANAGER_H