system_communication.cpp 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  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::communication_init()
  16. {
  17. return Rabbitmq_base::rabbitmq_init();
  18. }
  19. //初始化 通信 模块。如下三选一
  20. Error_manager System_communication::communication_init(int dispatch_id)
  21. {
  22. // return Rabbitmq_base::rabbitmq_init();
  23. switch ( dispatch_id )
  24. {
  25. case 0:
  26. {
  27. return Rabbitmq_base::rabbitmq_init_from_protobuf(SETTING_PATH RABBITMQ_PARAMETER_PATH_A);
  28. break;
  29. }
  30. case 1:
  31. {
  32. return Rabbitmq_base::rabbitmq_init_from_protobuf(SETTING_PATH RABBITMQ_PARAMETER_PATH_B);
  33. break;
  34. }
  35. case 2:
  36. {
  37. return Rabbitmq_base::rabbitmq_init_from_protobuf(SETTING_PATH RABBITMQ_PARAMETER_PATH_C);
  38. break;
  39. }
  40. case 11:
  41. {
  42. return Rabbitmq_base::rabbitmq_init_from_protobuf(SETTING_PATH RABBITMQ_PARAMETER_PATH_A1);
  43. break;
  44. }
  45. case 12:
  46. {
  47. return Rabbitmq_base::rabbitmq_init_from_protobuf(SETTING_PATH RABBITMQ_PARAMETER_PATH_A2);
  48. break;
  49. }
  50. case 13:
  51. {
  52. return Rabbitmq_base::rabbitmq_init_from_protobuf(SETTING_PATH RABBITMQ_PARAMETER_PATH_A3);
  53. break;
  54. }
  55. case 14:
  56. {
  57. return Rabbitmq_base::rabbitmq_init_from_protobuf(SETTING_PATH RABBITMQ_PARAMETER_PATH_A4);
  58. break;
  59. }
  60. case 21:
  61. {
  62. return Rabbitmq_base::rabbitmq_init_from_protobuf(SETTING_PATH RABBITMQ_PARAMETER_PATH_B1);
  63. break;
  64. }
  65. case 22:
  66. {
  67. return Rabbitmq_base::rabbitmq_init_from_protobuf(SETTING_PATH RABBITMQ_PARAMETER_PATH_B2);
  68. break;
  69. }
  70. case 23:
  71. {
  72. return Rabbitmq_base::rabbitmq_init_from_protobuf(SETTING_PATH RABBITMQ_PARAMETER_PATH_B3);
  73. break;
  74. }
  75. case 24:
  76. {
  77. return Rabbitmq_base::rabbitmq_init_from_protobuf(SETTING_PATH RABBITMQ_PARAMETER_PATH_B4);
  78. break;
  79. }
  80. case 25:
  81. {
  82. return Rabbitmq_base::rabbitmq_init_from_protobuf(SETTING_PATH RABBITMQ_PARAMETER_PATH_B5);
  83. break;
  84. }
  85. case 31:
  86. {
  87. return Rabbitmq_base::rabbitmq_init_from_protobuf(SETTING_PATH RABBITMQ_PARAMETER_PATH_C1);
  88. break;
  89. }
  90. case 32:
  91. {
  92. return Rabbitmq_base::rabbitmq_init_from_protobuf(SETTING_PATH RABBITMQ_PARAMETER_PATH_C2);
  93. break;
  94. }
  95. default:
  96. {
  97. return Error_manager(Error_code::COMMUNICATION_READ_PROTOBUF_ERROR, Error_level::MINOR_ERROR,
  98. " System_communication::communication_init dispatch_id error ");
  99. break;
  100. }
  101. }
  102. return Error_code::SUCCESS;
  103. }
  104. //检查消息是否有效, 主要检查消息类型和接受者, 判断这条消息是不是给我的.
  105. Error_manager System_communication::check_msg(Rabbitmq_message* p_msg)
  106. {
  107. return System_executor::get_instance_references().check_msg(p_msg);
  108. }
  109. //检查执行者的状态, 判断能否处理这条消息, 需要子类重载
  110. Error_manager System_communication::check_executer(Rabbitmq_message* p_msg)
  111. {
  112. return System_executor::get_instance_references().check_executer(p_msg);
  113. /*
  114. //检查对应模块的状态, 判断是否可以处理这条消息
  115. //同时也要判断是否超时, 超时返回 COMMUNICATION_ANALYSIS_TIME_OUT
  116. //如果处理器正在忙别的, 那么返回 COMMUNICATION_EXCUTER_IS_BUSY
  117. // std::cout << "Communication_socket_base::check_msg p_buf = " << p_msg->get_message_buf() << std::endl;
  118. // std::cout << "Communication_socket_base::check_msg size = " << p_msg->get_message_buf().size() << std::endl;
  119. Error_manager t_error;
  120. if ( p_msg->is_over_time() )
  121. {
  122. std::cout << "COMMUNICATION_ANALYSIS_TIME_OUT , " << std::endl;
  123. //超时:接收方不做处理,发送方会进行超时处理
  124. return Error_code::COMMUNICATION_ANALYSIS_TIME_OUT;
  125. }
  126. else
  127. {
  128. return System_executor::get_instance_references().check_executer(p_msg);
  129. }
  130. return Error_code::SUCCESS;
  131. */
  132. }
  133. //处理消息, 需要子类重载
  134. Error_manager System_communication::execute_msg(Rabbitmq_message* p_msg)
  135. {
  136. return System_executor::get_instance_references().execute_msg(p_msg);
  137. }
  138. //定时封装发送消息, 一般为心跳和状态信息, 需要子类重载
  139. Error_manager System_communication::auto_encapsulate_status()
  140. {
  141. Error_manager t_error;
  142. return System_executor::get_instance_references().encapsulate_send_dispatch_manager_status();
  143. return Error_code::SUCCESS;
  144. }