


#include "task_command_manager.h"
#include "../wanji_lidar/wanji_manager.h"
#include "../velodyne_lidar/velodyne_manager.h"
//对外的接口函数，所有的任务发送方，都必须使用该函数。
//execute_task在内部解析了Task_Base里面的Task_type，然后转发给具体某个模块的实例对象。
//input：p_task_base 任务单，基类的指针，指向子类的实例，（多态）
Error_manager Task_command_manager::execute_task(Task_Base* p_task_base)
{
	Error_manager t_error;
	void * tp_tast_receiver = p_task_base->get_tast_receiver();
	switch ( p_task_base->get_task_type() )
	{
	    case UNKNOW_TASK:
			t_error.error_manager_reset(Error_code::TASK_TYPE_IS_UNKNOW, Error_level::MINOR_ERROR,
								" p_task_base->get_task_type() is  UNKNOW_TASK ");
	        break;
		case LASER_MANGER_SCAN_TASK:
			// if ( tp_tast_receiver != NULL )
			// {
			// 	t_error = ((Laser_manager*)tp_tast_receiver)->execute_task(p_task_base);
			// }
			// else
			// {
			// 	t_error = Laser_manager::get_instance_references().execute_task(p_task_base);
			// }
			break;
		case LASER_BASE_SCAN_TASK:
			// if ( tp_tast_receiver != NULL )
			// {
			// 	t_error = ((Laser_base*)tp_tast_receiver)->execute_task(p_task_base);
			// }
			// else
			// {
			// 	return Error_manager(Error_code::TASK_NO_RECEIVER, Error_level::MINOR_ERROR,
			// 						" Task_command_manager::execute_task have not receiver  ");
	        // }
	        break;
		case LOCATE_MANGER_TASK:
			// if ( tp_tast_receiver != NULL )
			// {
			// 	t_error = ((Locate_manager*)tp_tast_receiver)->execute_task(p_task_base);
			// }
			// else
			// {
			// 	t_error = Locate_manager::get_instance_references().execute_task(p_task_base);
			// }
			break;
		case PLC_TASK:
			;
			break;
		case WANJI_MANAGER_TASK:
			if ( tp_tast_receiver != NULL )
			{
				t_error = ((Wanji_manager*)tp_tast_receiver)->execute_task(p_task_base);
			}
			else
			{
				t_error = Wanji_manager::get_instance_references().execute_task(p_task_base);
			}
			break;
		case VELODYNE_MANAGER_TASK:
			if ( tp_tast_receiver != NULL )
			{
				t_error = ((Velodyne_manager*)tp_tast_receiver)->execute_task(p_task_base);
			}
			else
			{
				t_error = Velodyne_manager::get_instance_references().execute_task(p_task_base);
			}
			break;
	    default:
			t_error.error_manager_reset(Error_code::TASK_TYPE_IS_UNKNOW, Error_level::MINOR_ERROR,
										" p_task_base->get_task_type() is  UNKNOW_TASK ");
	        break;
	}

	return t_error;
}



















