task_command_manager.cpp 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. #include "task_command_manager.h"
  2. #include "../laser/Laser.h"
  3. #include "../laser/laser_manager.h"
  4. #include "../locate/locate_manager.h"
  5. #include "../wanji_lidar/wanji_manager.h"
  6. //对外的接口函数,所有的任务发送方,都必须使用该函数。
  7. //execute_task在内部解析了Task_Base里面的Task_type,然后转发给具体某个模块的实例对象。
  8. //input:p_task_base 任务单,基类的指针,指向子类的实例,(多态)
  9. Error_manager Task_command_manager::execute_task(Task_Base* p_task_base)
  10. {
  11. Error_manager t_error;
  12. void * tp_tast_receiver = p_task_base->get_tast_receiver();
  13. switch ( p_task_base->get_task_type() )
  14. {
  15. case UNKNOW_TASK:
  16. t_error.error_manager_reset(Error_code::TASK_TYPE_IS_UNKNOW, Error_level::MINOR_ERROR,
  17. " p_task_base->get_task_type() is UNKNOW_TASK ");
  18. break;
  19. case LASER_MANGER_SCAN_TASK:
  20. if ( tp_tast_receiver != NULL )
  21. {
  22. t_error = ((Laser_manager*)tp_tast_receiver)->execute_task(p_task_base);
  23. }
  24. else
  25. {
  26. t_error = Laser_manager::get_instance_references().execute_task(p_task_base);
  27. }
  28. break;
  29. case LASER_BASE_SCAN_TASK:
  30. if ( tp_tast_receiver != NULL )
  31. {
  32. t_error = ((Laser_base*)tp_tast_receiver)->execute_task(p_task_base);
  33. }
  34. else
  35. {
  36. return Error_manager(Error_code::TASK_NO_RECEIVER, Error_level::MINOR_ERROR,
  37. " Task_command_manager::execute_task have not receiver ");
  38. }
  39. break;
  40. case LOCATE_MANGER_TASK:
  41. if ( tp_tast_receiver != NULL )
  42. {
  43. t_error = ((Locate_manager*)tp_tast_receiver)->execute_task(p_task_base);
  44. }
  45. else
  46. {
  47. t_error = Locate_manager::get_instance_references().execute_task(p_task_base);
  48. }
  49. break;
  50. case PLC_TASK:
  51. ;
  52. break;
  53. case WANJI_MANAGER_TASK:
  54. if ( tp_tast_receiver != NULL )
  55. {
  56. t_error = ((Wanji_manager*)tp_tast_receiver)->execute_task(p_task_base);
  57. }
  58. else
  59. {
  60. t_error = Wanji_manager::get_instance_references().execute_task(p_task_base);
  61. }
  62. break;
  63. default:
  64. t_error.error_manager_reset(Error_code::TASK_TYPE_IS_UNKNOW, Error_level::MINOR_ERROR,
  65. " p_task_base->get_task_type() is UNKNOW_TASK ");
  66. break;
  67. }
  68. return t_error;
  69. }