// // Created by zx on 2020/7/21. // #ifndef NNXX_TESTS_DISPATCH_COMMUNICATOR_H #define NNXX_TESTS_DISPATCH_COMMUNICATOR_H #include "communication_socket_base.h" #include "singleton.h" #include "dispatch_message.pb.h" #include "error_code.h" #include "thread_safe_map.h" class Dispatch_communicator :public Singleton, public Communication_socket_base { friend Singleton; public: virtual ~Dispatch_communicator(); Error_manager dispatch_request(message::Dispatch_request_msg& request,message::Dispatch_response_msg& result); /* * 提前取消请求 */ Error_manager cancel_request(message::Dispatch_request_msg& request); //检查停车入口 调度节点状态 Error_manager check_entrance_statu(int terminal_id); //检查取车出口 调度节点状态 Error_manager check_export_statu(int terminal_id); protected: Dispatch_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); private: thread_safe_map m_response_table; //停车调度模块状态 thread_safe_map m_storing_dispatch_statu_msg_map; thread_safe_map m_storing_dispatch_statu_time_map; //取车调度模块状态 thread_safe_map m_picking_dispatch_statu_msg_map; thread_safe_map m_picking_dispatch_statu_time_map; }; #endif //NNXX_TESTS_DISPATCH_COMMUNICATOR_H