syntax = "proto2";
package message;
import "message_base.proto";

// 请求
// 1.分配车位
// 2.查询车辆位置
// 3.解锁车位
// 4.手动操作修改车位状态
// 5.临时锁定车位

//车辆状态枚举
enum Vehicle_status
{
    eVehicle_idle           = 0;         //车辆空闲
    eVehicle_in_garage      = 1;         //车辆已入库
    eVehicle_parking        = 2;         //车辆停车中
    eVehicle_fetching       = 3;         //车辆取车中
    eVehicle_reserved       = 4;         //已预约未停入
    eVehicle_unknown        = 5;         //未知状态
}

//1.分配车位请求
message Parkspace_allocation_request_msg
{
    required Base_info                  base_info=1;            //消息类型
    required string                     command_key=2;           //指令唯一标识符id
    required Car_info                   car_info=3;
    required int32                      terminal_id=4;          //终端id，优化车位分配用
}

//分配车位反馈
message Parkspace_allocation_response_msg
{
    required Base_info                  base_info=1;            //消息类型
    required string                     command_key=2;           //指令唯一标识符id
    required Error_manager              error_manager=3;        //分配成功与否标志
    required Parkspace_info             allocated_space_info=4; //分配车位信息
}

//2.查询车辆位置请求
message Parkspace_search_request_msg
{
    required Base_info                  base_info=1;            //消息类型
    required string                     command_key=2;           //指令唯一标识符id
    required Car_info                   car_info=3;              //车辆凭证或号牌
}

//查询车辆位置反馈
message Parkspace_search_response_msg
{
    required Base_info                  base_info=1;            //消息类型
    required string                     command_key=2;           //指令唯一标识符id
    required Error_manager              error_manager=3;        //分配成功与否标志
    optional Parkspace_info             car_position=4;         //待查询车辆存放位置
}

//3.解锁车位请求
message Parkspace_release_request_msg
{
    required Base_info                  base_info=1;            //消息类型
    required string                     command_key=2;           //指令唯一标识符id
    required Parkspace_info             release_space_info=3;   //待释放车位信息
}

//解锁车位反馈
message Parkspace_release_response_msg
{
    required Base_info                  base_info=1;            //消息类型
    required string                     command_key=2;           //指令唯一标识符id
    required Error_manager              error_manager=3;        //分配成功与否标志
    required Parkspace_info             release_space_info=4;   //待释放车位信息
}

// 4.手动操作修改车位状态
message Parkspace_force_update_request_msg
{
    required Base_info                  base_info=1;            //消息类型
    required string                     command_key=2;           //指令唯一标识符id
    required Parkspace_info             update_space_info=3;    //待手动修改车位信息，通过id定位
}

//手动操作反馈
message Parkspace_force_update_response_msg
{
    required Base_info                  base_info=1;            //消息类型
    required string                     command_key=2;           //指令唯一标识符id
    required Error_manager              error_manager=3;        //分配成功与否标志
    required Parkspace_info             update_space_info=4;    //已修改后的车位信息
}

// 5.临时锁定车位
message Parkspace_confirm_alloc_request_msg
{
    required Base_info                  base_info=1;            //消息类型
    required string                     command_key=2;           //指令唯一标识符id
    required Parkspace_info             confirm_space_info=3;    //已修改后的车位信息
}

message Parkspace_confirm_alloc_response_msg
{
    required Base_info                  base_info=1;            //消息类型
    required string                     command_key=2;           //指令唯一标识符id
    required Error_manager              error_manager=3;        //分配成功与否标志
    required Parkspace_info             confirm_alloc_space_info=4;    //已修改后的车位信息
}

// 车位心跳状态信息
message Parkspace_allocation_status_msg
{
    required Base_info                  base_info=1;            //消息类型
    required Error_manager              error_manager=2;
    repeated Parkspace_info             parkspace_info=3;       //车位状态
}


