瀏覽代碼

add response timeout, add some return value.

youchen 4 年之前
父節點
當前提交
880cc02e2e

+ 2 - 0
communication/communication_message.cpp

@@ -44,6 +44,8 @@ Communication_message::~Communication_message()
 
 bool Communication_message::is_over_time()
 {
+	std::cout<<"interval: "<<std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now() - m_receive_time).count()<<std::endl;
+	std::cout<<"timeout: "<<m_timeout_ms.count()<<std::endl;
 	if ( std::chrono::system_clock::now() - m_receive_time > m_timeout_ms)
 	{
 	    return true;

+ 2 - 2
communication/communication_message.h

@@ -42,8 +42,8 @@ public:
 		eParkspace_release_response_msg = 0x37,		//释放车位反馈消息
 		eParkspace_force_update_request_msg = 0x38,	//手动修改车位消息
 		eParkspace_force_update_response_msg = 0x39,//手动修改车位反馈消息
-		eParkspace_confirm_alloc_request_msg = 0x40,//确认分配车位请求消息
-		eParkspace_confirm_alloc_response_msg = 0x41,//确认分配车位反馈消息
+		eParkspace_confirm_alloc_request_msg = 0x3a,//确认分配车位请求消息
+		eParkspace_confirm_alloc_response_msg = 0x3b,//确认分配车位反馈消息
 	};
 
 	//通讯单元

+ 4 - 4
message/message_base.pb.cc

@@ -250,9 +250,9 @@ void AddDescriptorsImpl() {
       "eParkspace_release_response_msg\0207\022\'\n#ePa"
       "rkspace_force_update_request_msg\0208\022(\n$eP"
       "arkspace_force_update_response_msg\0209\022(\n$"
-      "eParkspace_confirm_alloc_request_msg\020@\022)"
+      "eParkspace_confirm_alloc_request_msg\020:\022)"
       "\n%eParkspace_confirm_alloc_response_msg\020"
-      "A*e\n\014Communicator\022\n\n\006eEmpty\020\000\022\t\n\005eMain\020\001"
+      ";*e\n\014Communicator\022\n\n\006eEmpty\020\000\022\t\n\005eMain\020\001"
       "\022\016\n\teTerminor\020\200\002\022\017\n\neParkspace\020\200\004\022\016\n\teMe"
       "asurer\020\200\006\022\r\n\010eProcess\020\200\010*e\n\013Error_level\022"
       "\n\n\006NORMAL\020\000\022\024\n\020NEGLIGIBLE_ERROR\020\001\022\017\n\013MIN"
@@ -300,8 +300,8 @@ bool Message_type_IsValid(int value) {
     case 55:
     case 56:
     case 57:
-    case 64:
-    case 65:
+    case 58:
+    case 59:
       return true;
     default:
       return false;

+ 2 - 2
message/message_base.pb.h

@@ -92,8 +92,8 @@ enum Message_type {
   eParkspace_release_response_msg = 55,
   eParkspace_force_update_request_msg = 56,
   eParkspace_force_update_response_msg = 57,
-  eParkspace_confirm_alloc_request_msg = 64,
-  eParkspace_confirm_alloc_response_msg = 65
+  eParkspace_confirm_alloc_request_msg = 58,
+  eParkspace_confirm_alloc_response_msg = 59
 };
 bool Message_type_IsValid(int value);
 const Message_type Message_type_MIN = eBase_msg;

+ 2 - 2
message/message_base.proto

@@ -26,8 +26,8 @@ enum Message_type
     eParkspace_release_response_msg = 0x37;		//释放车位反馈消息
     eParkspace_force_update_request_msg = 0x38;	//手动修改车位消息
     eParkspace_force_update_response_msg = 0x39;//手动修改车位反馈消息
-    eParkspace_confirm_alloc_request_msg = 0x40;//确认分配车位请求消息
-    eParkspace_confirm_alloc_response_msg = 0x41;//确认分配车位反馈消息
+    eParkspace_confirm_alloc_request_msg = 0x3a;//确认分配车位请求消息
+    eParkspace_confirm_alloc_response_msg = 0x3b;//确认分配车位反馈消息
 }
 
 //通讯单元

+ 8 - 6
message/parkspace_allocation_message.pb.cc

@@ -682,14 +682,15 @@ void AddDescriptorsImpl() {
       "_info*\207\001\n\020Parkspace_status\022\024\n\020eParkspace"
       "_empty\020\000\022\027\n\023eParkspace_occupied\020\001\022\027\n\023ePa"
       "rkspace_reserved\020\002\022\025\n\021eParkspace_locked\020"
-      "\003\022\024\n\020eParkspace_error\020\004*\177\n\016Vehicle_statu"
-      "s\022\021\n\reVehicle_idle\020\000\022\026\n\022eVehicle_in_gara"
-      "ge\020\001\022\024\n\020eVehicle_parking\020\002\022\025\n\021eVehicle_f"
-      "etching\020\003\022\025\n\021eVehicle_reserved\020\004*(\n\tDire"
-      "ction\022\014\n\010eForward\020\000\022\r\n\teBackward\020\001"
+      "\003\022\024\n\020eParkspace_error\020\004*\225\001\n\016Vehicle_stat"
+      "us\022\021\n\reVehicle_idle\020\000\022\026\n\022eVehicle_in_gar"
+      "age\020\001\022\024\n\020eVehicle_parking\020\002\022\025\n\021eVehicle_"
+      "fetching\020\003\022\025\n\021eVehicle_reserved\020\004\022\024\n\020eVe"
+      "hicle_unknown\020\005*(\n\tDirection\022\014\n\010eForward"
+      "\020\000\022\r\n\teBackward\020\001"
   };
   ::google::protobuf::DescriptorPool::InternalAddGeneratedFile(
-      descriptor, 2634);
+      descriptor, 2657);
   ::google::protobuf::MessageFactory::InternalRegisterGeneratedFile(
     "parkspace_allocation_message.proto", &protobuf_RegisterTypes);
   ::protobuf_message_5fbase_2eproto::AddDescriptors();
@@ -735,6 +736,7 @@ bool Vehicle_status_IsValid(int value) {
     case 2:
     case 3:
     case 4:
+    case 5:
       return true;
     default:
       return false;

+ 3 - 2
message/parkspace_allocation_message.pb.h

@@ -156,11 +156,12 @@ enum Vehicle_status {
   eVehicle_in_garage = 1,
   eVehicle_parking = 2,
   eVehicle_fetching = 3,
-  eVehicle_reserved = 4
+  eVehicle_reserved = 4,
+  eVehicle_unknown = 5
 };
 bool Vehicle_status_IsValid(int value);
 const Vehicle_status Vehicle_status_MIN = eVehicle_idle;
-const Vehicle_status Vehicle_status_MAX = eVehicle_reserved;
+const Vehicle_status Vehicle_status_MAX = eVehicle_unknown;
 const int Vehicle_status_ARRAYSIZE = Vehicle_status_MAX + 1;
 
 const ::google::protobuf::EnumDescriptor* Vehicle_status_descriptor();

+ 2 - 1
parkspace_allocation/database_controller.cpp

@@ -2,7 +2,7 @@
  * @Description: 数据库操作类
  * @Author: yct
  * @Date: 2020-07-15 14:08:46
- * @LastEditTime: 2020-07-22 14:57:47
+ * @LastEditTime: 2020-07-22 19:10:53
  * @LastEditors: yct
  */
 
@@ -55,6 +55,7 @@ Error_manager Database_controller::database_controller_uninit()
         delete mp_guard_thread;
         mp_guard_thread = nullptr;
     }
+    return SUCCESS;
 }
 
 //数据库连接状态

+ 1 - 1
parkspace_allocation/parkspace_allocation_communicator.cpp

@@ -128,7 +128,7 @@ Error_manager Parkspace_allocation_communicator::check_executer(Communication_me
 	Error_manager t_error;
 	if ( p_msg->is_over_time() )
 	{
-		std::cout << "COMMUNICATION_ANALYSIS_TIME_OUT , " << std::endl;
+		std::cout << "Parkspace_allocation_communicator...COMMUNICATION_ANALYSIS_TIME_OUT , " << std::endl;
 		//超时:接收方不做处理,发送方会进行超时处理
 		return Error_code::COMMUNICATION_ANALYSIS_TIME_OUT;
 	}

+ 8 - 4
parkspace_allocation/parkspace_allocator.cpp

@@ -2,7 +2,7 @@
  * @Description: 车位分配算法模块,使用单例模式,接收外部请求并通过调用通信块接口发送反馈
  * @Author: yct
  * @Date: 2020-07-10 11:02:40
- * @LastEditTime: 2020-07-22 17:15:43
+ * @LastEditTime: 2020-07-22 19:21:03
  * @LastEditors: yct
  */ 
 
@@ -205,9 +205,10 @@ void Parkspace_allocator::execute_for_allocate(message::Car_info car_info, int t
         for (size_t i = 0; i < t_current_parkspace_status.parkspace_info_size(); i++)
         {
             // 找到高于车高且空闲车位,则分配
-            if (/*t_current_parkspace_status.parkspace_info(i).height() > car_info.car_height() 
-            && t_current_parkspace_status.parkspace_info(i).width() > car_info.car_width() 
-            && */t_current_parkspace_status.parkspace_info(i).parkspace_status() == message::Parkspace_status::eParkspace_empty)
+            if (t_current_parkspace_status.parkspace_info(i).has_car_info() 
+            /* && t_current_parkspace_status.parkspace_info(i).height() > car_info.car_height() 
+            && t_current_parkspace_status.parkspace_info(i).width() > car_info.car_width() */
+            && t_current_parkspace_status.parkspace_info(i).parkspace_status() == message::Parkspace_status::eParkspace_empty)
             {
                 index = i;
                 break;
@@ -324,6 +325,7 @@ void Parkspace_allocator::execute_for_release(message::Parkspace_info space_info
     t_response_header.set_msg_type(message::eParkspace_release_response_msg);
     t_response_header.set_sender(message::eParkspace);
     t_response_header.set_receiver(message::eMain);
+    t_response_header.set_timeout_ms(1000);
     message::Error_manager t_error;
     message::Parkspace_info t_release_space;
     //获取当前所有车位状态,找到待释放的车位
@@ -433,6 +435,7 @@ void Parkspace_allocator::execute_for_force_update(message::Parkspace_info space
     t_response_header.set_msg_type(message::eParkspace_force_update_response_msg);
     t_response_header.set_sender(message::eParkspace);
     t_response_header.set_receiver(message::eMain);
+    t_response_header.set_timeout_ms(1000);
     message::Error_manager t_error;
     message::Parkspace_info t_update_space;
     //获取当前所有车位状态,找到待释放的车位
@@ -495,6 +498,7 @@ void Parkspace_allocator::execute_for_confirm_alloc(message::Parkspace_info spac
     t_response_header.set_msg_type(message::eParkspace_confirm_alloc_response_msg);
     t_response_header.set_sender(message::eParkspace);
     t_response_header.set_receiver(message::eMain);
+    t_response_header.set_timeout_ms(1000);
     message::Error_manager t_error;
     message::Parkspace_info t_confirm_space;
     //获取当前所有车位状态,找到待释放的车位

+ 2 - 2
parkspace_allocation/parkspace_db_manager.cpp

@@ -2,7 +2,7 @@
  * @Description: 车位数据库管理
  * @Author: yct
  * @Date: 2020-07-19 09:57:45
- * @LastEditTime: 2020-07-22 17:06:57
+ * @LastEditTime: 2020-07-22 19:07:45
  * @LastEditors: yct
  */
 
@@ -234,7 +234,7 @@ Error_manager Parkspace_db_manager::update_vehicle_status(message::Parkspace_inf
         //判断车辆是否存在
         if(query_vehicle_result == nullptr || !query_vehicle_result->next())
         {
-            insert_vehicle(parkspace_info, vehicle_status);
+            return insert_vehicle(parkspace_info, vehicle_status);
         }else{
             char update_vehicle_sql[1024];
             memset(update_vehicle_sql, 0, 1024);

+ 6 - 2
test/parkspace_client.cpp

@@ -2,7 +2,7 @@
  * @Description: 模拟主程序发送车位分配请求,并监听状态信息
  * @Author: yct
  * @Date: 2020-07-08 15:44:43
- * @LastEditTime: 2020-07-22 17:07:36
+ * @LastEditTime: 2020-07-22 18:15:55
  * @LastEditors: yct
  */
 
@@ -51,7 +51,7 @@ std::string send_search_requests(int n, std::string license="鄂A12345")
     base_info.set_msg_type(message::Message_type::eParkspace_search_request_msg);
     base_info.set_sender(message::eMain);
     base_info.set_receiver(message::eParkspace);
-    base_info.set_timeout_ms(2000);
+    base_info.set_timeout_ms(10);
     car_info.set_car_height(2.0);
     car_info.set_car_width(2.0);
     car_info.set_license(license);
@@ -142,6 +142,7 @@ int main()
 
     std::string alloc_req = send_allocation_request(1);
     socket.send(alloc_req);
+    usleep(1000 * 500);
     // alloc_req = send_allocation_request(2);
     // socket.send(alloc_req);
     // alloc_req = send_allocation_request(3);
@@ -153,12 +154,15 @@ int main()
 
     std::string confirm_req = send_confirm_request(1);
     socket.send(confirm_req);
+    usleep(1000 * 500);
     
     std::string search_req = send_search_requests(1);
     socket.send(search_req);
+    usleep(1000 * 500);
 
     std::string release_req = send_release_request(1);
     socket.send(release_req);
+    usleep(1000 * 500);
 
     // usleep(1000*200);
     // search_req = send_search_requests(3);