Parkspace_communicator.h 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. //
  2. // Created by zx on 2020/7/9.
  3. //
  4. #ifndef NNXX_TESTS_PARKSPACE_COMMUNICATOR_H
  5. #define NNXX_TESTS_PARKSPACE_COMMUNICATOR_H
  6. #include <parkspace_allocation_message.pb.h>
  7. #include "communication_socket_base.h"
  8. #include "singleton.h"
  9. #include "thread_safe_map.h"
  10. #include "message_compare.h"
  11. /*
  12. * 注册消息的比较函数,用于重载==与<符号,使其可以用作map中的key
  13. */
  14. RegistoryCompare(message,message::Parkspace_allocation_request_msg);
  15. RegistoryCompare(message,message::Parkspace_search_request_msg)
  16. RegistoryCompare(message,message::Parkspace_release_request_msg)
  17. class Parkspace_communicator :public Singleton<Parkspace_communicator>, public Communication_socket_base
  18. {
  19. friend Singleton<Parkspace_communicator>;
  20. public:
  21. virtual ~Parkspace_communicator();
  22. /*
  23. * 请求分配车位
  24. */
  25. Error_manager alloc_request(message::Parkspace_allocation_request_msg& request,message::Parkspace_allocation_response_msg& result);
  26. /*
  27. * 查询车辆所在位置请求
  28. */
  29. Error_manager search_request(message::Parkspace_search_request_msg& request,message::Parkspace_search_response_msg& response);
  30. /*
  31. * 释放车位请求(停车失败或者取车完成时调用)
  32. */
  33. Error_manager release_request(message::Parkspace_release_request_msg& request,message::Parkspace_release_response_msg& response);
  34. Error_manager check_statu();
  35. protected:
  36. Parkspace_communicator();
  37. virtual Error_manager encapsulate_msg(Communication_message* message);
  38. virtual Error_manager execute_msg(Communication_message* p_msg);
  39. /*
  40. * 检测消息是否可被处理
  41. */
  42. virtual Error_manager check_msg(Communication_message* p_msg);
  43. /*
  44. * 心跳发送函数,重载
  45. */
  46. virtual Error_manager encapsulate_send_data();
  47. //检查消息是否可以被解析, 需要重载
  48. virtual Error_manager check_executer(Communication_message* p_msg);
  49. /*
  50. * 根据接收到的response,生成对应的 request
  51. */
  52. message::Parkspace_allocation_request_msg create_request_by_response(message::Parkspace_allocation_response_msg& msg);
  53. message::Parkspace_search_request_msg create_request_by_response(message::Parkspace_search_response_msg& msg);
  54. message::Parkspace_release_request_msg create_request_by_response(message::Parkspace_release_response_msg& msg);
  55. protected:
  56. thread_safe_map<message::Parkspace_allocation_request_msg,message::Parkspace_allocation_response_msg> m_alloc_table;
  57. thread_safe_map<message::Parkspace_search_request_msg,message::Parkspace_search_response_msg> m_search_table;
  58. thread_safe_map<message::Parkspace_release_request_msg,message::Parkspace_release_response_msg> m_release_table;
  59. Communication_message m_parkspace_status_msg;
  60. };
  61. #endif //NNXX_TESTS_PARKSPACE_COMMUNICATOR_H