// // Created by huli on 2020/6/28. // #include "system_communication.h" //#include "../laser/laser_manager.h" //#include "../locate/locate_manager.h" #include "../system/system_executor.h" System_communication::System_communication() { } System_communication::~System_communication() { } //检查消息是否有效, 主要检查消息类型和接受者, 判断这条消息是不是给我的. Error_manager System_communication::check_msg(Communication_message* p_msg) { return System_executor::get_instance_references().check_msg(p_msg); } //检查执行者的状态, 判断能否处理这条消息, 需要子类重载 Error_manager System_communication::check_executer(Communication_message* p_msg) { //检查对应模块的状态, 判断是否可以处理这条消息 //同时也要判断是否超时, 超时返回 COMMUNICATION_ANALYSIS_TIME_OUT //如果处理器正在忙别的, 那么返回 COMMUNICATION_EXCUTER_IS_BUSY // std::cout << "Communication_socket_base::check_msg p_buf = " << p_msg->get_message_buf() << std::endl; // std::cout << "Communication_socket_base::check_msg size = " << p_msg->get_message_buf().size() << std::endl; Error_manager t_error; if ( p_msg->is_over_time() ) { std::cout << "COMMUNICATION_ANALYSIS_TIME_OUT , " << std::endl; //超时:接收方不做处理,发送方会进行超时处理 return Error_code::COMMUNICATION_ANALYSIS_TIME_OUT; } else { return System_executor::get_instance_references().check_executer(p_msg); } return Error_code::SUCCESS; } //处理消息, 需要子类重载 Error_manager System_communication::execute_msg(Communication_message* p_msg) { return System_executor::get_instance_references().execute_msg(p_msg); } //定时封装发送消息, 一般为心跳和状态信息, 需要子类重载 Error_manager System_communication::encapsulate_send_data() { Error_manager t_error; return System_executor::get_instance_references().encapsulate_send_status(); /* message::Measure_request_msg t_measure_request_msg; t_measure_request_msg.mutable_base_info()->set_msg_type(message::Message_type::eLocate_request_msg); t_measure_request_msg.mutable_base_info()->set_timeout_ms(5000); t_measure_request_msg.mutable_base_info()->set_sender(message::Communicator::eMain); t_measure_request_msg.mutable_base_info()->set_receiver(message::Communicator::eMeasurer); t_measure_request_msg.set_command_id(123); t_measure_request_msg.set_terminal_id(1); string t_msg = t_measure_request_msg.SerializeAsString(); System_communication::get_instance_references().encapsulate_msg(t_msg); */ /* //创建一条状态消息 message::Measure_status_msg t_measure_status_msg; t_measure_status_msg.mutable_base_info()->set_msg_type(message::Message_type::eLocate_status_msg); t_measure_status_msg.mutable_base_info()->set_timeout_ms(5000); t_measure_status_msg.mutable_base_info()->set_sender(message::Communicator::eMeasurer); t_measure_status_msg.mutable_base_info()->set_receiver(message::Communicator::eMain); Laser_manager::Laser_manager_status t_laser_manager_status = Laser_manager::get_instance_references().get_laser_manager_status(); t_measure_status_msg.set_laser_manager_status((message::Laser_manager_status)t_laser_manager_status); std::vector & t_laser_vector = Laser_manager::get_instance_references().get_laser_vector(); for (auto iter = t_laser_vector.begin(); iter != t_laser_vector.end(); ++iter) { Laser_statu t_laser_statu = (*iter)->get_laser_statu(); t_measure_status_msg.add_laser_statu_vector((message::Laser_statu)t_laser_statu); } Locate_manager::Locate_manager_status t_locate_manager_status = Locate_manager::get_instance_references().get_locate_manager_status(); t_measure_status_msg.set_locate_manager_status((message::Locate_manager_status)t_locate_manager_status); t_measure_status_msg.mutable_error_manager()->set_error_code(t_error.get_error_code()); t_measure_status_msg.mutable_error_manager()->set_error_level((message::Error_level)t_error.get_error_level()); t_measure_status_msg.mutable_error_manager()->set_error_description(t_error.get_error_description(), t_error.get_description_length()); t_measure_status_msg.mutable_locate_information_realtime()->set_locate_x(0); t_measure_status_msg.mutable_locate_information_realtime()->set_locate_y(0); t_measure_status_msg.mutable_locate_information_realtime()->set_locate_angle(0); t_measure_status_msg.mutable_locate_information_realtime()->set_locate_length(0); t_measure_status_msg.mutable_locate_information_realtime()->set_locate_width(0); t_measure_status_msg.mutable_locate_information_realtime()->set_locate_height(0); t_measure_status_msg.mutable_locate_information_realtime()->set_locate_wheel_base(0); t_measure_status_msg.mutable_locate_information_realtime()->set_locate_wheel_width(0); t_measure_status_msg.mutable_locate_information_realtime()->set_locate_correct(0); string t_msg = t_measure_status_msg.SerializeAsString(); System_communication::get_instance_references().encapsulate_msg(t_msg); */ return Error_code::SUCCESS; }