system_communication.cpp 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. //
  2. // Created by huli on 2020/6/28.
  3. //
  4. #include "system_communication.h"
  5. #include "../laser/laser_manager.h"
  6. #include "../locate/locate_manager.h"
  7. #include "../system/system_executor.h"
  8. System_communication::System_communication()
  9. {
  10. }
  11. System_communication::~System_communication()
  12. {
  13. }
  14. //检查消息是否有效, 主要检查消息类型和接受者, 判断这条消息是不是给我的.
  15. Error_manager System_communication::check_msg(Communication_message* p_msg)
  16. {
  17. //通过 p_msg->get_message_type() 和 p_msg->get_receiver() 判断这条消息是不是给我的.
  18. if ( p_msg->get_message_type() == Communication_message::Message_type::eLocate_request_msg
  19. && p_msg->get_receiver() == Communication_message::Communicator::eMeasurer )
  20. {
  21. return Error_code::SUCCESS;
  22. }
  23. else
  24. {
  25. //无效的消息,
  26. return Error_code::INVALID_MESSAGE;
  27. }
  28. }
  29. //检查执行者的状态, 判断能否处理这条消息, 需要子类重载
  30. Error_manager System_communication::check_executer(Communication_message* p_msg)
  31. {
  32. //检查对应模块的状态, 判断是否可以处理这条消息
  33. //同时也要判断是否超时, 超时返回 COMMUNICATION_ANALYSIS_TIME_OUT
  34. //如果处理器正在忙别的, 那么返回 COMMUNICATION_EXCUTER_IS_BUSY
  35. std::cout << "Communication_socket_base::check_msg p_buf = " << p_msg->get_message_buf() << std::endl;
  36. std::cout << "Communication_socket_base::check_msg size = " << p_msg->get_message_buf().size() << std::endl;
  37. Error_manager t_error;
  38. if ( p_msg->is_over_time() )
  39. {
  40. std::cout << "COMMUNICATION_ANALYSIS_TIME_OUT , " << std::endl;
  41. //超时:接收方不做处理,发送方会进行超时处理
  42. return Error_code::COMMUNICATION_ANALYSIS_TIME_OUT;
  43. }
  44. else
  45. {
  46. return System_executor::get_instance_references().check_executer(p_msg);
  47. }
  48. return Error_code::SUCCESS;
  49. }
  50. //处理消息, 需要子类重载
  51. Error_manager System_communication::execute_msg(Communication_message* p_msg)
  52. {
  53. return System_executor::get_instance_references().execute_msg(p_msg);
  54. }
  55. //定时封装发送消息, 一般为心跳和状态信息, 需要子类重载
  56. Error_manager System_communication::encapsulate_send_data()
  57. {
  58. Error_manager t_error;
  59. //创建一条答复消息
  60. message::Measure_status_msg t_measure_status_msg;
  61. t_measure_status_msg.mutable_base_info()->set_msg_type(message::Message_type::eLocate_status_msg);
  62. t_measure_status_msg.mutable_base_info()->set_timeout_ms(5000);
  63. t_measure_status_msg.mutable_base_info()->set_sender(message::Communicator::eMeasurer);
  64. t_measure_status_msg.mutable_base_info()->set_receiver(message::Communicator::eMain);
  65. Laser_manager::Laser_manager_status t_laser_manager_status = Laser_manager::get_instance_references().get_laser_manager_status();
  66. t_measure_status_msg.set_laser_manager_status((message::Laser_manager_status)t_laser_manager_status);
  67. std::vector<Laser_base*> & t_laser_vector = Laser_manager::get_instance_references().get_laser_vector();
  68. for (auto iter = t_laser_vector.begin(); iter != t_laser_vector.end(); ++iter)
  69. {
  70. Laser_statu t_laser_statu = (*iter)->get_laser_statu();
  71. t_measure_status_msg.add_laser_statu_vector((message::Laser_statu)t_laser_statu);
  72. }
  73. Locate_manager::Locate_manager_status t_locate_manager_status = Locate_manager::get_instance_references().get_locate_manager_status();
  74. t_measure_status_msg.set_locate_manager_status((message::Locate_manager_status)t_locate_manager_status);
  75. t_measure_status_msg.mutable_error_manager()->set_error_code(t_error.get_error_code());
  76. t_measure_status_msg.mutable_error_manager()->set_error_level((message::Error_level)t_error.get_error_level());
  77. t_measure_status_msg.mutable_error_manager()->set_error_description(t_error.get_error_description());
  78. t_measure_status_msg.mutable_locate_information_realtime()->set_locate_x(0);
  79. t_measure_status_msg.mutable_locate_information_realtime()->set_locate_y(0);
  80. t_measure_status_msg.mutable_locate_information_realtime()->set_locate_angle(0);
  81. t_measure_status_msg.mutable_locate_information_realtime()->set_locate_length(0);
  82. t_measure_status_msg.mutable_locate_information_realtime()->set_locate_width(0);
  83. t_measure_status_msg.mutable_locate_information_realtime()->set_locate_height(0);
  84. t_measure_status_msg.mutable_locate_information_realtime()->set_locate_wheel_base(0);
  85. t_measure_status_msg.mutable_locate_information_realtime()->set_locate_wheel_width(0);
  86. t_measure_status_msg.mutable_locate_information_realtime()->set_locate_correct(0);
  87. string t_msg = t_measure_status_msg.SerializeAsString();
  88. System_communication::get_instance_references().encapsulate_msg(t_msg);
  89. return Error_code::SUCCESS;
  90. }