#include "parkspace_communicator.h" #include "parkspace_manager.h" Parkspace_communicator::Parkspace_communicator() { } Parkspace_communicator::~Parkspace_communicator() { } //************************************* 公有函数 **************************************** //外部调用发送分配车位结果 Error_manager Parkspace_communicator::send_response(Communication_message *message) { return encapsulate_msg(message); } //************************************* 内部函数 **************************************** //封装反馈消息自动发送 Error_manager Parkspace_communicator::encapsulate_msg(Communication_message *message) { if (message == nullptr) { return Error_manager(POINTER_IS_NULL, NEGLIGIBLE_ERROR, "Parkspace_communicator::message null pointer"); } //针对待发送的不同反馈消息,分别进行校核 switch(message->get_message_type()) { case Communication_message::eParkspace_allocation_response_msg: { // message::Parkspace_allocation_response_msg response; // bool result = response.ParseFromString(message->get_message_buf()); // //可增加待发送分配车位反馈消息校核 break; } case Communication_message::eParkspace_search_response_msg: { break; } case Communication_message::eParkspace_release_response_msg: { break; } case Communication_message::eParkspace_force_update_response_msg: { break; } case Communication_message::eParkspace_confirm_alloc_response_msg: { break; } case Communication_message::eParkspace_allocation_status_msg: { break; } case Communication_message::eParkspace_allocation_data_response_msg: { break; } //huli 新增2条消息判断 状态消息和车位数据消息 default: return Error_manager(PARKSPACE_ALLOCATOR_MSG_RESPONSE_TYPE_ERROR, NEGLIGIBLE_ERROR, "Parkspace_communicator::message response type error"); } //发送请求 return Communication_socket_base::encapsulate_msg(message); } //封装发送消息 Error_manager Parkspace_communicator::encapsulate_msg(std::string message) { return Communication_socket_base::encapsulate_msg(message); } //重载执行消息,父类线程通过check_msg接收到车位分配请求后调用,解析内容并进行相应处理 Error_manager Parkspace_communicator::execute_msg(Communication_message *p_msg) { return Parkspace_manager::get_instance_references().execute_msg(p_msg); // return Error_manager(PARKSPACE_ALLOCATOR_MSG_RESPONSE_TYPE_ERROR, NEGLIGIBLE_ERROR, "parkspace allocation wrong request type"); } //检查消息是否应由本模块接收 //本模块接收车位分配请求、车位查询请求与车位释放请求 Error_manager Parkspace_communicator::check_msg(Communication_message* p_msg) { //通过 p_msg->get_message_type() 和 p_msg->get_receiver() 判断这条消息是不是车位请求消息. if(p_msg->get_receiver() == Communication_message::Communicator::eParkspace) { switch(p_msg->get_message_type()) { case Communication_message::Message_type::eParkspace_allocation_request_msg: return Error_code::SUCCESS; case Communication_message::Message_type::eParkspace_search_request_msg: return Error_code::SUCCESS; case Communication_message::Message_type::eParkspace_release_request_msg: return Error_code::SUCCESS; case Communication_message::Message_type::eParkspace_force_update_request_msg: return Error_code::SUCCESS; case Communication_message::Message_type::eParkspace_confirm_alloc_request_msg: return Error_code::SUCCESS; case Communication_message::Message_type::eParkspace_refresh_request_msg: return Error_code::SUCCESS; default: return Error_code::INVALID_MESSAGE; } } return Error_code::INVALID_MESSAGE; } Error_manager Parkspace_communicator::check_executer(Communication_message* p_msg) { //检查对应模块的状态, 判断是否可以处理这条消息 //同时也要判断是否超时, 超时返回 COMMUNICATION_ANALYSIS_TIME_OUT //如果处理器正在忙别的, 那么返回 COMMUNICATION_EXCUTER_IS_BUSY Error_manager t_error; if ( p_msg->is_over_time() ) { //huli +1 std::cout << "Parkspace_communicator...COMMUNICATION_ANALYSIS_TIME_OUT , " << std::endl; //超时:接收方不做处理,发送方会进行超时处理 return Error_code::COMMUNICATION_ANALYSIS_TIME_OUT; } else { Error_manager t_error=Database_controller::get_instance_pointer()->check_status(); if(t_error != SUCCESS) { return t_error; } t_error=Parkspace_manager::get_instance_pointer()->check_status(); if(t_error != SUCCESS) { return t_error; } } return Error_code::SUCCESS; } //重载心跳与车位状态发送函数 Error_manager Parkspace_communicator::encapsulate_send_data() { //胡力 这里只发送manager状态 不发生车位数据 // parkspace_manager_satus m_current_status; // Database_controller_status m_database_controller_status; return Parkspace_manager::get_instance_pointer()->encapsulating_heartbeat_messages(); // // bool is_push = m_send_data_list.push(&tp_msg); // if ( is_push == false ) // { // return Error_manager(Error_code::CONTAINER_IS_TERMINATE, Error_level::MINOR_ERROR, // " Parkspace_communicator::send status error "); // } // return Error_code::SUCCESS; }