system_executor.h 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. //
  2. // Created by huli on 2020/7/2.
  3. //
  4. #ifndef NNXX_TESTS_SYSTEM_EXECUTOR_H
  5. #define NNXX_TESTS_SYSTEM_EXECUTOR_H
  6. #include "../tool/thread_pool.h"
  7. #include "../tool/singleton.h"
  8. #include "../error_code/error_code.h"
  9. #include "../communication/communication_message.h"
  10. #include "../dispatch/dispatch_manager.h"
  11. #include "../locate/locate_manager.h"
  12. #include "../locate/locate_manager_task.h"
  13. class System_executor:public Singleton<System_executor>
  14. {
  15. // 子类必须把父类设定为友元函数,这样父类才能使用子类的私有构造函数。
  16. friend class Singleton<System_executor>;
  17. public:
  18. //系统执行者的状态
  19. enum System_executor_status
  20. {//default SYSTEM_EXECUTOR_UNKNOW = 0
  21. SYSTEM_EXECUTOR_UNKNOW = 0, //
  22. SYSTEM_EXECUTOR_READY = 1, //
  23. SYSTEM_EXECUTOR_FAULT = 10, //
  24. };
  25. private:
  26. // 父类的构造函数必须保护,子类的构造函数必须私有。
  27. System_executor();
  28. public:
  29. //必须关闭拷贝构造和赋值构造,只能通过 get_instance 函数来进行操作唯一的实例。
  30. System_executor(const System_executor& other) = delete;
  31. System_executor& operator =(const System_executor& other) = delete;
  32. ~System_executor();
  33. public://API functions
  34. //初始化
  35. Error_manager system_executor_init(int threads_size);
  36. //反初始化
  37. Error_manager system_executor_uninit();
  38. //检查执行者的状态, 判断能否处理这条消息,
  39. Error_manager check_executer(Communication_message* p_msg);
  40. //处理消息的执行函数
  41. Error_manager execute_msg(Communication_message* p_msg);
  42. //检查状态
  43. Error_manager check_status();
  44. //定时发送状态信息
  45. Error_manager encapsulate_send_status();
  46. //判断是否为待机,如果已经准备好,则可以执行任务。
  47. bool is_ready();
  48. public://get or set member variable
  49. System_executor_status get_system_executor_status();
  50. public:
  51. //雷达感测定位 的处理函数
  52. //input::command_id, 消息指令id, 由主控制系统生成的唯一码
  53. //input::command_id, 终端id, 对应具体的某个车位
  54. //return::void, 没有返回, 执行结果直接生成一条答复消息, 然后通过通信返回
  55. void execute_for_measure(int command_id, int terminal_id);
  56. //调度模块的处理函数
  57. void execute_for_dispatch(int command_id, Dispatch_manager::Dispatch_motion_direction dispatch_motion_direction,
  58. int terminal_id, int parkspace_id, Locate_information * p_locate_information);
  59. protected://member variable
  60. System_executor_status m_system_executor_status; //系统执行者的状态
  61. Thread_pool m_thread_pool; //执行多任务的线程池
  62. private:
  63. };
  64. #endif //NNXX_TESTS_SYSTEM_EXECUTOR_H