123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 |
- #include "parkspace_allocation_communicator.h"
- #include "parkspace_allocator.h"
- Parkspace_allocation_communicator::Parkspace_allocation_communicator()
- {
- }
- Parkspace_allocation_communicator::~Parkspace_allocation_communicator()
- {
- }
- //************************************* 公有函数 ****************************************
- //外部调用发送分配车位结果
- Error_manager Parkspace_allocation_communicator::send_response(Communication_message *message)
- {
- return encapsulate_msg(message);
- }
- //************************************* 内部函数 ****************************************
- //封装反馈消息自动发送
- Error_manager Parkspace_allocation_communicator::encapsulate_msg(Communication_message *message)
- {
- if (message == nullptr)
- {
- return Error_manager(POINTER_IS_NULL, NEGLIGIBLE_ERROR, "Parkspace_allocation_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;
- }
- default:
- return Error_manager(PARKSPACE_ALLOCATOR_MSG_RESPONSE_TYPE_ERROR, NEGLIGIBLE_ERROR, "Parkspace_allocation_communicator::message response type error");
- }
- //发送请求
- return Communication_socket_base::encapsulate_msg(message);
- }
- //重载执行消息,父类线程通过check_msg接收到车位分配请求后调用,解析内容并进行相应处理
- Error_manager Parkspace_allocation_communicator::execute_msg(Communication_message *p_msg)
- {
- return Parkspace_allocator::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_allocation_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;
- default:
- return Error_code::INVALID_MESSAGE;
- }
- }
- return ERROR;
- }
- Error_manager Parkspace_allocation_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() )
- {
- std::cout << "Parkspace_allocation_communicator...COMMUNICATION_ANALYSIS_TIME_OUT , " << std::endl;
- //超时:接收方不做处理,发送方会进行超时处理
- return Error_code::COMMUNICATION_ANALYSIS_TIME_OUT;
- }
- else
- {
- return Parkspace_allocator::get_instance_references().check_executer(p_msg);
- }
- return Error_code::SUCCESS;
- }
- //重载心跳与车位状态发送函数
- Error_manager Parkspace_allocation_communicator::encapsulate_send_data()
- {
- std::lock_guard<std::mutex> lck(Parkspace_allocator::get_instance_references().get_status_mutex());
- Communication_socket_base::encapsulate_msg( Parkspace_allocator::get_instance_references().get_parkspace_status_msg().SerializeAsString() );
- return Error_code::SUCCESS;
- }
|