rabbitmq_communication.cpp 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. #include "rabbitmq_communication.h"
  2. RabbitmqCommunicationTof3D::RabbitmqCommunicationTof3D() = default;
  3. RabbitmqCommunicationTof3D::~RabbitmqCommunicationTof3D() = default;
  4. //检查消息是否有效, 主要检查消息类型和接受者, 判断这条消息是不是给我的.
  5. Error_manager RabbitmqCommunicationTof3D::check_msg(Rabbitmq_message *p_msg) {
  6. return {SUCCESS, NORMAL, "Don't check any message."};
  7. }
  8. //检查执行者的状态, 判断能否处理这条消息, 需要子类重载
  9. Error_manager RabbitmqCommunicationTof3D::check_executer(Rabbitmq_message *p_msg) {
  10. return {SUCCESS, NORMAL, "Don't check any message."};
  11. }
  12. //处理消息, 需要子类重载
  13. Error_manager RabbitmqCommunicationTof3D::execute_msg(Rabbitmq_message *p_msg) {
  14. Error_manager ret;
  15. // LOG(INFO) << p_msg->m_routing_key;
  16. // if (p_msg->m_routing_key == "dispatch_31_statu_port") {
  17. // dispatch_node_statu t_dispatch_node_statu;
  18. // if(google::protobuf::TextFormat::ParseFromString(p_msg->m_message_buf, &t_dispatch_node_statu))
  19. // {
  20. // LOG(INFO) << t_dispatch_node_statu.DebugString();
  21. // // TODO:开关门控制算法流程
  22. //// usleep(5 * 1000 * 1000);
  23. //// DetectManager::iter()->Stop();
  24. //// DeviceTof3D::iter()->Stop();
  25. ////
  26. //// usleep(5 * 1000 * 1000);
  27. //// DeviceTof3D::iter()->Continue();
  28. //// DetectManager::iter()->Continue();
  29. // }
  30. // }
  31. //
  32. // //终端点击存车时, 发送存车表单给检查节点, 这里顺便发送给感测节点.
  33. // if (p_msg->m_routing_key == "user_park_command_request_port") {
  34. // park_table t_park_table_msg; //存车表单
  35. // if(google::protobuf::TextFormat::ParseFromString(p_msg->m_message_buf, &t_park_table_msg))
  36. // {
  37. // LOG(INFO) << t_park_table_msg.DebugString();
  38. // // TODO:从算法取数据保存
  39. // }
  40. // }
  41. return ret;
  42. }
  43. //处理消息, 需要子类重载
  44. Error_manager RabbitmqCommunicationTof3D::execute_time_consume_msg(Rabbitmq_message *p_msg) {
  45. return {};
  46. }
  47. //定时封装发送消息, 一般为心跳和状态信息, 需要子类重载
  48. Error_manager RabbitmqCommunicationTof3D::auto_encapsulate_status() {
  49. static int heart = 0;
  50. if (++heart > 999) {
  51. heart = 0;
  52. }
  53. measure_buffer rabbit_measure_info;
  54. DetectManager::DetectResult detect_measure_info;
  55. // 设备状态
  56. if (DeviceTof3D::iter()->getDeviceStatus() != SUCCESS) {
  57. rabbit_measure_info.mutable_measure_info_to_plc_forward()->set_ground_status(MeasureStatu::Lidar_Disconnect);
  58. }
  59. MeasureStatu measure_status = DetectManager::iter()->getMeasureResult(detect_measure_info);
  60. if (measure_status != MeasureStatu::Measure_OK) {
  61. if (measure_status == MeasureStatu::Measure_Border) {
  62. rabbit_measure_info.mutable_measure_info_to_plc_forward()->set_border_statu(Range_status::Range_back);
  63. }
  64. rabbit_measure_info.mutable_measure_info_to_plc_forward()->set_ground_status(measure_status);
  65. }
  66. // 超界判断
  67. JetStream::MeasureInfo info;
  68. m_boundary.transMeasureInfo(detect_measure_info, info);
  69. m_boundary.limit(info);
  70. // 保存grpc数据中间块
  71. TransitData::MeasureInfo grpc_measure_info;
  72. m_boundary.transMeasureInfo(info, grpc_measure_info);
  73. grpc_measure_info.error.append("heart: " + std::to_string(heart));
  74. grpc_measure_info.error.append(detect_measure_info.info());
  75. TransitData::get_instance_pointer()->setMeasureInfo(grpc_measure_info);
  76. // 发送rabbitmq消息
  77. m_boundary.transMeasureInfo(info, rabbit_measure_info);
  78. encapsulate_status_msg(rabbit_measure_info.DebugString(), 0);
  79. return {};
  80. }
  81. Error_manager RabbitmqCommunicationTof3D::rabbitmq_init_from_protobuf(std::string prototxt_path) {
  82. m_boundary.init(ETC_PATH PROJECT_NAME "/limit.prototxt") ?
  83. printf("boundary init success.\n") :
  84. printf("boundary init failed form %s.\n", ETC_PATH PROJECT_NAME "/limit.prototxt");
  85. return Rabbitmq_base::rabbitmq_init_from_protobuf(prototxt_path);
  86. }