|
@@ -4,59 +4,6 @@
|
|
|
|
|
|
#include "Parkspace_communicator.h"
|
|
|
|
|
|
-namespace message {
|
|
|
- bool operator<(const message::Parkspace_allocation_request_msg &msg1,
|
|
|
- const message::Parkspace_allocation_request_msg &msg2) {
|
|
|
- return (msg1.command_id() < msg2.command_id());
|
|
|
- }
|
|
|
-
|
|
|
- bool operator==(const message::Parkspace_allocation_request_msg &msg1,
|
|
|
- const message::Parkspace_allocation_request_msg &msg2)
|
|
|
- {
|
|
|
- if (msg1.base_info().msg_type() == msg2.base_info().msg_type()
|
|
|
- && msg1.base_info().sender() == msg2.base_info().sender()
|
|
|
- && msg1.base_info().receiver() == msg2.base_info().receiver()
|
|
|
- && msg1.command_id() == msg2.command_id()
|
|
|
- && msg1.terminal_id() == msg2.terminal_id()){
|
|
|
- return true;
|
|
|
- }
|
|
|
- return false;
|
|
|
- }
|
|
|
-
|
|
|
- bool operator<(const message::Parkspace_search_request_msg &msg1,
|
|
|
- const message::Parkspace_search_request_msg &msg2) {
|
|
|
- return (msg1. command_id() < msg2.command_id());
|
|
|
- }
|
|
|
-
|
|
|
-bool operator==(const message::Parkspace_search_request_msg &msg1, const message::Parkspace_search_request_msg &msg2)
|
|
|
-{
|
|
|
- if (msg1.base_info().msg_type() == msg2.base_info().msg_type()
|
|
|
- && msg1.base_info().sender() == msg2.base_info().sender()
|
|
|
- && msg1.base_info().receiver() == msg2.base_info().receiver()
|
|
|
- && msg1.command_id() == msg2.command_id()) {
|
|
|
- return true;
|
|
|
- }
|
|
|
- return false;
|
|
|
-}
|
|
|
-
|
|
|
-bool operator<(const message::Parkspace_release_request_msg &msg1, const message::Parkspace_release_request_msg &msg2)
|
|
|
-{
|
|
|
- return (msg1.command_id() < msg2.command_id());
|
|
|
-}
|
|
|
-
|
|
|
-bool operator==(const message::Parkspace_release_request_msg &msg1, const message::Parkspace_release_request_msg &msg2)
|
|
|
-{
|
|
|
- if (msg1.base_info().msg_type() == msg2.base_info().msg_type()
|
|
|
- && msg1.base_info().sender() == msg2.base_info().sender()
|
|
|
- && msg1.base_info().receiver() == msg2.base_info().receiver()
|
|
|
- && msg1.command_id() == msg2.command_id()) {
|
|
|
- return true;
|
|
|
- }
|
|
|
- return false;
|
|
|
-}
|
|
|
-
|
|
|
-}
|
|
|
-
|
|
|
|
|
|
Parkspace_communicator::~Parkspace_communicator(){}
|
|
|
/*
|
|
@@ -67,7 +14,7 @@ Error_manager Parkspace_communicator::alloc_request(message::Parkspace_allocatio
|
|
|
/*
|
|
|
* 检查request合法性,以及模块状态
|
|
|
*/
|
|
|
- if(request.base_info().sender()!=message::eMain||request.base_info().receiver()!=message::eTable)
|
|
|
+ if(request.base_info().sender()!=message::eMain||request.base_info().receiver()!=message::eParkspace)
|
|
|
return Error_manager(PARKSPACE_ALLOC_REQUEST_INVALID,MINOR_ERROR,"parkspace alloc request invalid");
|
|
|
|
|
|
if(m_alloc_table.find(request)==true)
|
|
@@ -82,7 +29,7 @@ Error_manager Parkspace_communicator::alloc_request(message::Parkspace_allocatio
|
|
|
message::Base_info base_msg;
|
|
|
base_msg.set_msg_type(message::eParkspace_allocation_request_msg);
|
|
|
base_msg.set_sender(message::eMain);
|
|
|
- base_msg.set_receiver(message::eTable);
|
|
|
+ base_msg.set_receiver(message::eParkspace);
|
|
|
base_msg.set_timeout_ms(timeout);
|
|
|
message.reset(base_msg,request.SerializeAsString());
|
|
|
|
|
@@ -108,7 +55,7 @@ Error_manager Parkspace_communicator::alloc_request(message::Parkspace_allocatio
|
|
|
"parkspace alloc response msg type error");
|
|
|
}
|
|
|
//检查基本信息是否匹配
|
|
|
- if (response_base.sender() != message::eTable ||
|
|
|
+ if (response_base.sender() != message::eParkspace ||
|
|
|
response_base.receiver() != message::eMain ||
|
|
|
response.command_id() != request.command_id()) {
|
|
|
return Error_manager(PARKSPACE_ALLOC_RESPONSE_INFO_ERROR, MAJOR_ERROR,
|
|
@@ -133,6 +80,8 @@ Error_manager Parkspace_communicator::alloc_request(message::Parkspace_allocatio
|
|
|
std::this_thread::yield();
|
|
|
usleep(1000);
|
|
|
}while(time<double(timeout));
|
|
|
+ //超时,删除记录,返回错误
|
|
|
+ m_alloc_table.erase(request);
|
|
|
return Error_manager(RESPONSE_TIMEOUT,MINOR_ERROR,"parkspace alloc request timeout");
|
|
|
|
|
|
}
|
|
@@ -146,7 +95,7 @@ Error_manager Parkspace_communicator::search_request(message::Parkspace_search_r
|
|
|
/*
|
|
|
* 检查request合法性,以及模块状态
|
|
|
*/
|
|
|
- if(request.base_info().sender()!=message::eMain||request.base_info().receiver()!=message::eTable)
|
|
|
+ if(request.base_info().sender()!=message::eMain||request.base_info().receiver()!=message::eParkspace)
|
|
|
return Error_manager(PARKSPACE_SEARCH_REQUEST_INVALID,MINOR_ERROR,"parkspace search request invalid");
|
|
|
|
|
|
if(m_search_table.find(request)==true)
|
|
@@ -161,7 +110,7 @@ Error_manager Parkspace_communicator::search_request(message::Parkspace_search_r
|
|
|
message::Base_info base_msg;
|
|
|
base_msg.set_msg_type(message::eParkspace_search_request_msg);
|
|
|
base_msg.set_sender(message::eMain);
|
|
|
- base_msg.set_receiver(message::eTable);
|
|
|
+ base_msg.set_receiver(message::eParkspace);
|
|
|
base_msg.set_timeout_ms(timeout);
|
|
|
message.reset(base_msg,request.SerializeAsString());
|
|
|
|
|
@@ -187,7 +136,7 @@ Error_manager Parkspace_communicator::search_request(message::Parkspace_search_r
|
|
|
"parkspace search response msg type error");
|
|
|
}
|
|
|
//检查基本信息是否匹配
|
|
|
- if (response_base.sender() != message::eTable ||
|
|
|
+ if (response_base.sender() != message::eParkspace ||
|
|
|
response_base.receiver() != message::eMain ||
|
|
|
response.command_id() != request.command_id()) {
|
|
|
return Error_manager(PARKSPACE_SEARCH_RESPONSE_INFO_ERROR, MAJOR_ERROR,
|
|
@@ -195,8 +144,12 @@ Error_manager Parkspace_communicator::search_request(message::Parkspace_search_r
|
|
|
}
|
|
|
result = response;
|
|
|
m_search_table.erase(request);
|
|
|
-
|
|
|
- return SUCCESS;
|
|
|
+ if(response.has_error_manager())
|
|
|
+ {
|
|
|
+ if(response.error_manager().error_code()==0)
|
|
|
+ return SUCCESS;
|
|
|
+ }
|
|
|
+ return Error_manager(FAILED,MINOR_ERROR,"车位查询返回错误码");
|
|
|
|
|
|
}
|
|
|
}
|
|
@@ -212,6 +165,8 @@ Error_manager Parkspace_communicator::search_request(message::Parkspace_search_r
|
|
|
std::this_thread::yield();
|
|
|
usleep(1000);
|
|
|
}while(time<double(timeout));
|
|
|
+ //超时,删除记录,返回错误
|
|
|
+ m_search_table.erase(request);
|
|
|
return Error_manager(RESPONSE_TIMEOUT,MINOR_ERROR,"parkspace search request timeout");
|
|
|
}
|
|
|
|
|
@@ -224,7 +179,7 @@ Error_manager Parkspace_communicator::release_request(message::Parkspace_release
|
|
|
/*
|
|
|
* 检查request合法性,以及模块状态
|
|
|
*/
|
|
|
- if(request.base_info().sender()!=message::eMain||request.base_info().receiver()!=message::eTable)
|
|
|
+ if(request.base_info().sender()!=message::eMain||request.base_info().receiver()!=message::eParkspace)
|
|
|
return Error_manager(PARKSPACE_RELEASE_REQUEST_INVALID,MINOR_ERROR,"parkspace release request invalid");
|
|
|
|
|
|
if(m_release_table.find(request)==true)
|
|
@@ -239,7 +194,7 @@ Error_manager Parkspace_communicator::release_request(message::Parkspace_release
|
|
|
message::Base_info base_msg;
|
|
|
base_msg.set_msg_type(message::eParkspace_release_request_msg);
|
|
|
base_msg.set_sender(message::eMain);
|
|
|
- base_msg.set_receiver(message::eTable);
|
|
|
+ base_msg.set_receiver(message::eParkspace);
|
|
|
base_msg.set_timeout_ms(timeout);
|
|
|
message.reset(base_msg,request.SerializeAsString());
|
|
|
|
|
@@ -265,7 +220,7 @@ Error_manager Parkspace_communicator::release_request(message::Parkspace_release
|
|
|
"parkspace release response msg type error");
|
|
|
}
|
|
|
//检查基本信息是否匹配
|
|
|
- if (response_base.sender() != message::eTable ||
|
|
|
+ if (response_base.sender() != message::eParkspace ||
|
|
|
response_base.receiver() != message::eMain ||
|
|
|
response.command_id() != request.command_id()) {
|
|
|
return Error_manager(PARKSPACE_RELEASE_RESPONSE_INFO_ERROR, MAJOR_ERROR,
|
|
@@ -290,6 +245,8 @@ Error_manager Parkspace_communicator::release_request(message::Parkspace_release
|
|
|
std::this_thread::yield();
|
|
|
usleep(1000);
|
|
|
}while(time<double(timeout));
|
|
|
+ //超时,删除记录,返回错误
|
|
|
+ m_release_table.erase(request);
|
|
|
return Error_manager(RESPONSE_TIMEOUT,MINOR_ERROR,"parkspace release request timeout");
|
|
|
}
|
|
|
|
|
@@ -305,6 +262,7 @@ Parkspace_communicator::Parkspace_communicator(){}
|
|
|
|
|
|
Error_manager Parkspace_communicator::encapsulate_msg(Communication_message* message)
|
|
|
{
|
|
|
+ Error_manager code;
|
|
|
switch (message->get_message_type())
|
|
|
{
|
|
|
case Communication_message::eParkspace_allocation_request_msg:
|
|
@@ -314,7 +272,12 @@ Error_manager Parkspace_communicator::encapsulate_msg(Communication_message* mes
|
|
|
//记录数据
|
|
|
m_alloc_table[request]=message::Parkspace_allocation_response_msg();
|
|
|
//发送请求
|
|
|
- return Communication_socket_base::encapsulate_msg(message);
|
|
|
+ code= Communication_socket_base::encapsulate_msg(message);
|
|
|
+ if(code!=SUCCESS)
|
|
|
+ {
|
|
|
+ m_alloc_table.erase(request);
|
|
|
+ }
|
|
|
+ break;
|
|
|
}
|
|
|
case Communication_message::eParkspace_search_request_msg:
|
|
|
{
|
|
@@ -323,7 +286,12 @@ Error_manager Parkspace_communicator::encapsulate_msg(Communication_message* mes
|
|
|
//记录数据
|
|
|
m_search_table[request]=message::Parkspace_search_response_msg();
|
|
|
//发送请求
|
|
|
- return Communication_socket_base::encapsulate_msg(message);
|
|
|
+ code= Communication_socket_base::encapsulate_msg(message);
|
|
|
+ if(code!=SUCCESS)
|
|
|
+ {
|
|
|
+ m_search_table.erase(request);
|
|
|
+ }
|
|
|
+ break;
|
|
|
}
|
|
|
case Communication_message::eParkspace_release_request_msg:
|
|
|
{
|
|
@@ -332,11 +300,17 @@ Error_manager Parkspace_communicator::encapsulate_msg(Communication_message* mes
|
|
|
//记录数据
|
|
|
m_release_table[request]=message::Parkspace_release_response_msg();
|
|
|
//发送请求
|
|
|
- return Communication_socket_base::encapsulate_msg(message);
|
|
|
+ code= Communication_socket_base::encapsulate_msg(message);
|
|
|
+ if(code!=SUCCESS)
|
|
|
+ {
|
|
|
+ m_release_table.erase(request);
|
|
|
+ }
|
|
|
+ break;
|
|
|
}
|
|
|
default:
|
|
|
- return Error_manager(PARKSPACE_REQUEST_MSG_TYPE_ERROR,NEGLIGIBLE_ERROR,"parkspace message table is not exist");
|
|
|
+ code= Error_manager(PARKSPACE_REQUEST_MSG_TYPE_ERROR,NEGLIGIBLE_ERROR,"parkspace message table is not exist");
|
|
|
}
|
|
|
+ return code;
|
|
|
|
|
|
}
|
|
|
Error_manager Parkspace_communicator::execute_msg(Communication_message* p_msg)
|
|
@@ -365,7 +339,10 @@ Error_manager Parkspace_communicator::execute_msg(Communication_message* p_msg)
|
|
|
case Communication_message::eParkspace_search_response_msg:
|
|
|
{
|
|
|
message::Parkspace_search_response_msg response;
|
|
|
- response.ParseFromString(p_msg->get_message_buf());
|
|
|
+ if(false==response.ParseFromString(p_msg->get_message_buf()))
|
|
|
+ {
|
|
|
+ return Error_manager(ERROR,CRITICAL_ERROR,"parkspace search response 解析失败");
|
|
|
+ }
|
|
|
message::Parkspace_search_request_msg request=create_request_by_response(response);
|
|
|
///查询请求表是否存在,并且更新
|
|
|
if(m_search_table.find_update(request,response))
|
|
@@ -407,7 +384,8 @@ Error_manager Parkspace_communicator::check_msg(Communication_message* p_msg)
|
|
|
||p_msg->get_message_type() == Communication_message::Message_type::eParkspace_search_response_msg
|
|
|
||p_msg->get_message_type() == Communication_message::Message_type::eParkspace_release_response_msg
|
|
|
||p_msg->get_message_type() == Communication_message::Message_type::eParkspace_allocation_status_msg)
|
|
|
- && p_msg->get_receiver() == Communication_message::Communicator::eMain )
|
|
|
+ && p_msg->get_receiver() == Communication_message::Communicator::eMain
|
|
|
+ && p_msg->get_sender() == Communication_message::Communicator::eTable)
|
|
|
{
|
|
|
return Error_code::SUCCESS;
|
|
|
}
|
|
@@ -439,7 +417,7 @@ Parkspace_communicator::create_request_by_response(message::Parkspace_allocation
|
|
|
{
|
|
|
message::Parkspace_allocation_request_msg request;
|
|
|
message::Base_info baseInfo;
|
|
|
- baseInfo.set_msg_type(message::eLocate_request_msg);
|
|
|
+ baseInfo.set_msg_type(message::eParkspace_allocation_request_msg);
|
|
|
baseInfo.set_sender(response.base_info().sender());
|
|
|
baseInfo.set_receiver(response.base_info().receiver());
|
|
|
request.mutable_base_info()->CopyFrom(baseInfo);
|
|
@@ -453,7 +431,7 @@ Parkspace_communicator::create_request_by_response(message::Parkspace_search_res
|
|
|
{
|
|
|
message::Parkspace_search_request_msg request;
|
|
|
message::Base_info baseInfo;
|
|
|
- baseInfo.set_msg_type(message::eLocate_request_msg);
|
|
|
+ baseInfo.set_msg_type(message::eParkspace_search_request_msg);
|
|
|
baseInfo.set_sender(response.base_info().sender());
|
|
|
baseInfo.set_receiver(response.base_info().receiver());
|
|
|
request.mutable_base_info()->CopyFrom(baseInfo);
|
|
@@ -468,7 +446,7 @@ Parkspace_communicator::create_request_by_response(message::Parkspace_release_re
|
|
|
{
|
|
|
message::Parkspace_release_request_msg request;
|
|
|
message::Base_info baseInfo;
|
|
|
- baseInfo.set_msg_type(message::eLocate_request_msg);
|
|
|
+ baseInfo.set_msg_type(message::eParkspace_release_request_msg);
|
|
|
baseInfo.set_sender(response.base_info().sender());
|
|
|
baseInfo.set_receiver(response.base_info().receiver());
|
|
|
request.mutable_base_info()->CopyFrom(baseInfo);
|