// // Created by zx on 2020/6/18. // #ifndef NNXX_TESTS_LOCATE_COMMUNICATOR_H #define NNXX_TESTS_LOCATE_COMMUNICATOR_H #include #include "communication_socket_base.h" #include "singleton.h" #include "measure_message.pb.h" #include "error_code.h" #include "thread_safe_map.h" /* * 注册消息的比较函数,用于重载==与<符号,使其可以用作map中的key */ class Locate_communicator: public Singleton, public Communication_socket_base { friend Singleton; public: virtual ~Locate_communicator(); Error_manager locate_request(message::Measure_request_msg& request, message::Measure_response_msg& result,Thread_condition& cancel_condition); /* * 提前取消请求 */ Error_manager cancel_request(message::Measure_request_msg& request); Error_manager check_statu(int terminal_id); protected: Locate_communicator(); virtual Error_manager encapsulate_msg(Communication_message* message); virtual Error_manager execute_msg(Communication_message* p_msg); /* * 检测消息是否可被处理 */ virtual Error_manager check_msg(Communication_message* p_msg); /* * 心跳发送函数,重载 */ virtual Error_manager encapsulate_send_data(); //检查消息是否可以被解析, 需要重载 virtual Error_manager check_executer(Communication_message* p_msg); protected: thread_safe_map m_response_table; thread_safe_map m_measure_statu_msg_map; thread_safe_map m_statu_recv_time_map; }; #endif //NNXX_TESTS_LOCATE_COMMUNICATOR_H