|
@@ -6,7 +6,15 @@
|
|
|
#include "process_message.pb.h"
|
|
|
#include <condition_variable>
|
|
|
|
|
|
-Terminal_communication::Terminal_communication(){}
|
|
|
+Terminal_communication::Terminal_communication()
|
|
|
+ :m_update_msg_map_thread(nullptr)
|
|
|
+{
|
|
|
+ if(m_update_msg_map_thread== nullptr)
|
|
|
+ {
|
|
|
+ m_publish_exit_condition.reset(false, false, false);
|
|
|
+ m_update_msg_map_thread=new std::thread(thread_update_map_function,this);
|
|
|
+ }
|
|
|
+}
|
|
|
Terminal_communication::~Terminal_communication(){}
|
|
|
|
|
|
//重载函数
|
|
@@ -93,7 +101,14 @@ Error_manager Terminal_communication::execute_msg(Communication_message* p_msg)
|
|
|
message::Base_info base_info=msg.base_info();
|
|
|
if(base_info.sender()==message::eMain)
|
|
|
{
|
|
|
- m_storing_statu_map[msg.terminal_id()]=msg;
|
|
|
+ if(m_storing_statu_map.find(msg.license())==false)
|
|
|
+ {
|
|
|
+ m_storing_license_queue.push(msg.license());
|
|
|
+ }
|
|
|
+ m_storing_statu_map[msg.license()]=msg;
|
|
|
+ std::chrono::system_clock::time_point time_point=std::chrono::system_clock::now();
|
|
|
+ m_storing_statu_time_point_map[msg.license()]=time_point;
|
|
|
+
|
|
|
|
|
|
}
|
|
|
}
|
|
@@ -108,7 +123,13 @@ Error_manager Terminal_communication::execute_msg(Communication_message* p_msg)
|
|
|
message::Base_info base_info=msg.base_info();
|
|
|
if(base_info.sender()==message::eMain)
|
|
|
{
|
|
|
- m_picking_statu_map[msg.terminal_id()]=msg;
|
|
|
+ if(m_picking_statu_map.find(msg.license())==false)
|
|
|
+ {
|
|
|
+ m_picking_license_queue.push(msg.license());
|
|
|
+ }
|
|
|
+ m_picking_statu_map[msg.license()]=msg;
|
|
|
+ std::chrono::system_clock::time_point time_point=std::chrono::system_clock::now();
|
|
|
+ m_picking_statu_time_point_map[msg.license()]=time_point;
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -136,17 +157,6 @@ Error_manager Terminal_communication::check_executer(Communication_message* p_ms
|
|
|
return SUCCESS;
|
|
|
}
|
|
|
|
|
|
-/*
|
|
|
- * 设置终端id
|
|
|
- */
|
|
|
-Error_manager Terminal_communication::set_terminal_id(int id)
|
|
|
-{
|
|
|
- if(id<0 || id>5)
|
|
|
- return Error_manager(ERROR,CRITICAL_ERROR,"终端设置id不在范围");
|
|
|
- m_terminal_id=id;
|
|
|
- return SUCCESS;
|
|
|
-}
|
|
|
-
|
|
|
|
|
|
/*
|
|
|
* 发送停车指令请求
|
|
@@ -163,7 +173,7 @@ Error_manager Terminal_communication::store_request(message::Store_command_reque
|
|
|
Error_manager code;
|
|
|
Communication_message message;
|
|
|
message.reset(request.base_info(),request.SerializeAsString());
|
|
|
- int timeout=1000*5;
|
|
|
+ int timeout=1000*3;
|
|
|
|
|
|
code=encapsulate_msg(&message);
|
|
|
if(code!=SUCCESS)
|
|
@@ -221,7 +231,7 @@ Error_manager Terminal_communication::pickup_request(message::Pickup_command_req
|
|
|
Error_manager code;
|
|
|
Communication_message message;
|
|
|
message.reset(request.base_info(),request.SerializeAsString());
|
|
|
- int timeout=1000;
|
|
|
+ int timeout=1000*3;
|
|
|
|
|
|
code=encapsulate_msg(&message);
|
|
|
if(code!=SUCCESS)
|
|
@@ -272,9 +282,9 @@ Error_manager Terminal_communication::pickup_request(message::Pickup_command_req
|
|
|
/*
|
|
|
* 获取停车流程状态
|
|
|
*/
|
|
|
-Error_manager Terminal_communication::get_storing_statu(int terminal_id,message::Storing_process_statu_msg& msg)
|
|
|
+Error_manager Terminal_communication::get_storing_statu(std::string car_license,message::Storing_process_statu_msg& msg)
|
|
|
{
|
|
|
- if(m_storing_statu_map.find(terminal_id,msg)) {
|
|
|
+ if(m_storing_statu_map.find(car_license,msg)) {
|
|
|
return SUCCESS;
|
|
|
}
|
|
|
return FAILED;
|
|
@@ -283,9 +293,59 @@ Error_manager Terminal_communication::get_storing_statu(int terminal_id,message:
|
|
|
/*
|
|
|
* 获取取车流程状态
|
|
|
*/
|
|
|
-Error_manager Terminal_communication::get_picking_statu(int terminal_id,message::Picking_process_statu_msg& msg)
|
|
|
+Error_manager Terminal_communication::get_picking_statu(std::string car_license,message::Picking_process_statu_msg& msg)
|
|
|
{
|
|
|
- if(m_picking_statu_map.find(terminal_id,msg))
|
|
|
+ if(m_picking_statu_map.find(car_license,msg))
|
|
|
return SUCCESS;
|
|
|
return FAILED;
|
|
|
+}
|
|
|
+
|
|
|
+void Terminal_communication::update_map()
|
|
|
+{
|
|
|
+ while(false==m_publish_exit_condition.wait_for_ex(std::chrono::milliseconds(200)))
|
|
|
+ {
|
|
|
+ std::string license;
|
|
|
+ if (m_storing_license_queue.try_pop(license))
|
|
|
+ {
|
|
|
+ std::chrono::system_clock::time_point t1 = std::chrono::system_clock::now();
|
|
|
+ std::chrono::system_clock::time_point start = m_storing_statu_time_point_map[license];
|
|
|
+ auto duration = std::chrono::duration_cast<std::chrono::microseconds>(t1 - start);
|
|
|
+ double time = 1000.0 * double(duration.count()) * std::chrono::microseconds::period::num /
|
|
|
+ std::chrono::microseconds::period::den;
|
|
|
+
|
|
|
+ if (time > 3000) {
|
|
|
+ m_storing_statu_time_point_map.erase(license);
|
|
|
+ m_storing_statu_map.erase(license);
|
|
|
+
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ m_storing_license_queue.push(license);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (m_picking_license_queue.try_pop(license))
|
|
|
+ {
|
|
|
+ std::chrono::system_clock::time_point t1 = std::chrono::system_clock::now();
|
|
|
+ std::chrono::system_clock::time_point start = m_picking_statu_time_point_map[license];
|
|
|
+ auto duration = std::chrono::duration_cast<std::chrono::microseconds>(t1 - start);
|
|
|
+ double time = 1000.0 * double(duration.count()) * std::chrono::microseconds::period::num /
|
|
|
+ std::chrono::microseconds::period::den;
|
|
|
+
|
|
|
+ if (time > 3000) {
|
|
|
+ m_picking_statu_time_point_map.erase(license);
|
|
|
+ m_picking_statu_map.erase(license);
|
|
|
+
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ m_picking_license_queue.push(license);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+void Terminal_communication::thread_update_map_function(Terminal_communication *terminal) {
|
|
|
+ terminal->update_map();
|
|
|
}
|