Merge branch 'master' of https://git.code.tencent.com/beijing-rtss-test/bj-rtsts-server-go
This commit is contained in:
commit
424d63264c
@ -2,10 +2,12 @@ package api
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"net/http"
|
"net/http"
|
||||||
|
"reflect"
|
||||||
"strconv"
|
"strconv"
|
||||||
|
|
||||||
jwt "github.com/appleboy/gin-jwt/v2"
|
jwt "github.com/appleboy/gin-jwt/v2"
|
||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
|
"joylink.club/bj-rtsts-server/config"
|
||||||
"joylink.club/bj-rtsts-server/dto"
|
"joylink.club/bj-rtsts-server/dto"
|
||||||
"joylink.club/bj-rtsts-server/middleware"
|
"joylink.club/bj-rtsts-server/middleware"
|
||||||
"joylink.club/bj-rtsts-server/service"
|
"joylink.club/bj-rtsts-server/service"
|
||||||
@ -20,6 +22,7 @@ func InitProjectRunConfigRouter(api *gin.RouterGroup, authMiddleware *jwt.GinJWT
|
|||||||
authed.GET("/:id", queryProjectRunConfig)
|
authed.GET("/:id", queryProjectRunConfig)
|
||||||
authed.PUT("/:id", updateProjectRunConfig)
|
authed.PUT("/:id", updateProjectRunConfig)
|
||||||
authed.DELETE("/:id", deleteProjectRunConfig)
|
authed.DELETE("/:id", deleteProjectRunConfig)
|
||||||
|
authed.GET("/description", getRunCofigDescription)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 分页查询项目运行环境配置信息
|
// 分页查询项目运行环境配置信息
|
||||||
@ -169,3 +172,52 @@ func deleteProjectRunConfig(c *gin.Context) {
|
|||||||
service.DeleteProjectRunConfigById(int32(id))
|
service.DeleteProjectRunConfigById(int32(id))
|
||||||
c.JSON(http.StatusOK, true)
|
c.JSON(http.StatusOK, true)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 获取项目运行环境信息结构说明
|
||||||
|
//
|
||||||
|
// @Summary 获取项目运行环境信息结构说明
|
||||||
|
//
|
||||||
|
// @Security JwtAuth
|
||||||
|
//
|
||||||
|
// @Description 获取项目运行环境信息结构说明
|
||||||
|
// @Tags 项目运行环境配置Api
|
||||||
|
// @Accept json
|
||||||
|
// @Produce json
|
||||||
|
// @Success 200 {object} nil
|
||||||
|
// @Failure 401 {object} dto.ErrorDto
|
||||||
|
// @Failure 404 {object} dto.ErrorDto
|
||||||
|
// @Failure 500 {object} dto.ErrorDto
|
||||||
|
// @Router /api/v1/runconfig/description [get]
|
||||||
|
func getRunCofigDescription(c *gin.Context) {
|
||||||
|
c.JSON(http.StatusOK, parseRunCofigStruct(&config.ThridPartyConfig{}))
|
||||||
|
}
|
||||||
|
|
||||||
|
// 解析环境配置结构
|
||||||
|
func parseRunCofigStruct(m interface{}) []*dto.RunConfigDescription {
|
||||||
|
var cs []*dto.RunConfigDescription
|
||||||
|
t := reflect.TypeOf(m).Elem()
|
||||||
|
for i := 0; i < t.NumField(); i++ {
|
||||||
|
field := t.Field(i)
|
||||||
|
if field.Tag.Get("description") == "" {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
c := &dto.RunConfigDescription{
|
||||||
|
FieldName: field.Tag.Get("json"),
|
||||||
|
Description: field.Tag.Get("description"),
|
||||||
|
}
|
||||||
|
k := field.Type.Kind()
|
||||||
|
switch k {
|
||||||
|
case reflect.Struct:
|
||||||
|
c.ItemTypeFields = parseRunCofigStruct(reflect.New(field.Type).Interface())
|
||||||
|
c.Type = "map"
|
||||||
|
case reflect.Slice:
|
||||||
|
e := field.Type.Elem()
|
||||||
|
c.ItemTypeFields = parseRunCofigStruct(reflect.New(e).Interface())
|
||||||
|
c.Type = "array"
|
||||||
|
default:
|
||||||
|
c.Type = k.String()
|
||||||
|
}
|
||||||
|
cs = append(cs, c)
|
||||||
|
}
|
||||||
|
return cs
|
||||||
|
}
|
||||||
|
@ -38,6 +38,7 @@ func InitSimulationRouter(api *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddle
|
|||||||
authed.POST("/ibp/key/operation", ibpKeyOperation)
|
authed.POST("/ibp/key/operation", ibpKeyOperation)
|
||||||
authed.GET("/:id/getMapKilometerRange", getMapKilometerRange)
|
authed.GET("/:id/getMapKilometerRange", getMapKilometerRange)
|
||||||
authed.POST("/psl/operation", pslBtnOperation)
|
authed.POST("/psl/operation", pslBtnOperation)
|
||||||
|
authed.POST("/psd/operation", psdOperation)
|
||||||
|
|
||||||
// 初始化地图信息
|
// 初始化地图信息
|
||||||
initPublishMapInfo()
|
initPublishMapInfo()
|
||||||
@ -302,14 +303,17 @@ func signalOperation(c *gin.Context) {
|
|||||||
// @Success 200 {object} string
|
// @Success 200 {object} string
|
||||||
// @Failure 500 {object} dto.ErrorDto
|
// @Failure 500 {object} dto.ErrorDto
|
||||||
// @Router /api/v1/simulation/axleSection/operation [post]
|
// @Router /api/v1/simulation/axleSection/operation [post]
|
||||||
func axleSectionOperation(c *gin.Context) { //操作:设置故障占用、取消故障占用、计轴直接复位、计轴预复位
|
func axleSectionOperation(c *gin.Context) { //操作:设置故障占用、取消故障占用
|
||||||
req := &dto.AxleSectionOperationReqDto{}
|
req := &dto.AxleSectionOperationReqDto{}
|
||||||
if err := c.ShouldBind(&req); err != nil {
|
if err := c.ShouldBind(&req); err != nil {
|
||||||
panic(sys_error.New("输入参数格式错误", err))
|
panic(sys_error.New("输入参数格式错误", err))
|
||||||
}
|
}
|
||||||
simulation := checkDeviceDataAndReturn(req.SimulationId)
|
simulation := checkDeviceDataAndReturn(req.SimulationId)
|
||||||
slog.Info("传入状态参数", req)
|
slog.Info("传入状态参数", req)
|
||||||
memory.ChangeAxleSectionState(simulation, req)
|
err := memory.ChangeAxleSectionState(simulation, req)
|
||||||
|
if err != nil {
|
||||||
|
panic(sys_error.New("操作失败", err))
|
||||||
|
}
|
||||||
c.JSON(http.StatusOK, "ok")
|
c.JSON(http.StatusOK, "ok")
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -394,7 +398,7 @@ func ibpKeyOperation(c *gin.Context) {
|
|||||||
c.JSON(http.StatusOK, "ok")
|
c.JSON(http.StatusOK, "ok")
|
||||||
}
|
}
|
||||||
|
|
||||||
// PSL操作
|
// PSL按钮操作
|
||||||
//
|
//
|
||||||
// @Summary PSL操作
|
// @Summary PSL操作
|
||||||
//
|
//
|
||||||
@ -409,7 +413,7 @@ func ibpKeyOperation(c *gin.Context) {
|
|||||||
//
|
//
|
||||||
// @Success 200 {object} string
|
// @Success 200 {object} string
|
||||||
// @Failure 500 {object} dto.ErrorDto
|
// @Failure 500 {object} dto.ErrorDto
|
||||||
// @Router /api/v1/simulation/ibp/operation [post]
|
// @Router /api/v1/simulation/psl/operation [post]
|
||||||
func pslBtnOperation(c *gin.Context) {
|
func pslBtnOperation(c *gin.Context) {
|
||||||
req := &dto.PslOperationReqDto{}
|
req := &dto.PslOperationReqDto{}
|
||||||
if err := c.ShouldBind(&req); err != nil {
|
if err := c.ShouldBind(&req); err != nil {
|
||||||
@ -421,6 +425,35 @@ func pslBtnOperation(c *gin.Context) {
|
|||||||
c.JSON(http.StatusOK, "ok")
|
c.JSON(http.StatusOK, "ok")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 屏蔽门操作
|
||||||
|
//
|
||||||
|
// @Summary 屏蔽门操作
|
||||||
|
//
|
||||||
|
// @Security JwtAuth
|
||||||
|
//
|
||||||
|
// @Description 屏蔽门操作
|
||||||
|
// @Tags ATS测试仿真Api
|
||||||
|
// @Accept json
|
||||||
|
// @Produce json
|
||||||
|
// @Param Authorization header string true "JWT Token"
|
||||||
|
// @Param PsdOperationReq body request_proto.PsdOperationReq true "屏蔽门操作"
|
||||||
|
//
|
||||||
|
// @Success 200 {object} string
|
||||||
|
// @Failure 500 {object} dto.ErrorDto
|
||||||
|
// @Router /api/v1/simulation/psd/operation [post]
|
||||||
|
func psdOperation(c *gin.Context) {
|
||||||
|
req := &request_proto.PsdOperationReq{}
|
||||||
|
if err := c.ShouldBind(&req); err != nil {
|
||||||
|
panic(dto.ErrorDto{Code: dto.ArgumentParseError, Message: err.Error()})
|
||||||
|
}
|
||||||
|
simulation := checkDeviceDataAndReturn(req.SimulationId)
|
||||||
|
slog.Info("传入状态参数", req)
|
||||||
|
if err := memory.HandlePsdOperation(simulation, req); err != nil {
|
||||||
|
panic(dto.ErrorDto{Code: dto.ArgumentError, Message: err.Error()})
|
||||||
|
}
|
||||||
|
c.JSON(http.StatusOK, "ok")
|
||||||
|
}
|
||||||
|
|
||||||
// 获取仿真地图的公里标范围
|
// 获取仿真地图的公里标范围
|
||||||
//
|
//
|
||||||
// @Summary 获取仿真地图的公里标范围
|
// @Summary 获取仿真地图的公里标范围
|
||||||
|
@ -1 +1 @@
|
|||||||
Subproject commit 8afde905e5b5376dc0bce29c099fb5fef2576e02
|
Subproject commit 92c5696b7eb3b47b387f48e094f5c8644ddb7da8
|
@ -53,29 +53,30 @@ type centrifugo struct {
|
|||||||
// 第三方配置结构
|
// 第三方配置结构
|
||||||
type ThridPartyConfig struct {
|
type ThridPartyConfig struct {
|
||||||
Id int32 `json:"id"`
|
Id int32 `json:"id"`
|
||||||
Dynamics DynamicsConfig `json:"dynamics"`
|
Dynamics DynamicsConfig `json:"dynamics" description:"动力学配置"`
|
||||||
Vobc VobcConfig `json:"vobc"`
|
Vobc VobcConfig `json:"vobc" description:"半实物配置"`
|
||||||
Interlock InterlockConfig `json:"interlock"`
|
Interlocks []InterlockConfig `json:"interlock" description:"联锁配置"`
|
||||||
}
|
}
|
||||||
type DynamicsConfig struct {
|
type DynamicsConfig struct {
|
||||||
Ip string `json:"ip"`
|
Ip string `json:"ip" description:"IP配置"`
|
||||||
UdpLocalPort int `json:"udpLocalPort"`
|
UdpLocalPort int `json:"udpLocalPort" description:"本机监听接收端口"`
|
||||||
UdpRemotePort int `json:"udpRemotePort"`
|
UdpRemotePort int `json:"udpRemotePort" description:"远端接收道岔信息端口"`
|
||||||
UdpRemoteTrainPort int `json:"udpRemoteTrainPort"`
|
UdpRemoteTrainPort int `json:"udpRemoteTrainPort" description:"远端接收列车信息端口"`
|
||||||
HttpPort int `json:"httpPort"`
|
HttpPort int `json:"httpPort" description:"http服务端口"`
|
||||||
Open bool `json:"open"`
|
Open bool `json:"open" description:"是否开启"`
|
||||||
}
|
}
|
||||||
type VobcConfig struct {
|
type VobcConfig struct {
|
||||||
Ip string `json:"ip"`
|
Ip string `json:"ip" description:"IP配置"`
|
||||||
LocalPort int `json:"localPort"`
|
LocalPort int `json:"localPort" description:"本机监听接收端口"`
|
||||||
RemotePort int `json:"remotePort"`
|
RemotePort int `json:"remotePort" description:"远端接收列车信息端口"`
|
||||||
Open bool `json:"open"`
|
Open bool `json:"open" description:"是否开启"`
|
||||||
}
|
}
|
||||||
type InterlockConfig struct {
|
type InterlockConfig struct {
|
||||||
Ip string `json:"ip"`
|
Ip string `json:"ip" description:"IP配置"`
|
||||||
LocalPort int `json:"localPort"`
|
LocalPort int `json:"localPort" description:"本机监听接收端口"`
|
||||||
RemotePort int `json:"remotePort"`
|
RemotePort int `json:"remotePort" description:"远端接收采集信息端口"`
|
||||||
Open bool `json:"open"`
|
Open bool `json:"open" description:"是否开启"`
|
||||||
|
Code string `json:"code" description:"所属集中站"`
|
||||||
}
|
}
|
||||||
|
|
||||||
var Config AppConfig
|
var Config AppConfig
|
||||||
|
364
docs/docs.go
364
docs/docs.go
@ -2758,7 +2758,8 @@ const docTemplate = `{
|
|||||||
{
|
{
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"name": "config",
|
"name": "config",
|
||||||
"in": "query"
|
"in": "query",
|
||||||
|
"required": true
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "string",
|
"type": "string",
|
||||||
@ -2773,7 +2774,8 @@ const docTemplate = `{
|
|||||||
{
|
{
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"name": "name",
|
"name": "name",
|
||||||
"in": "query"
|
"in": "query",
|
||||||
|
"required": true
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"responses": {
|
"responses": {
|
||||||
@ -2801,6 +2803,49 @@ const docTemplate = `{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"/api/v1/runconfig/description": {
|
||||||
|
"get": {
|
||||||
|
"security": [
|
||||||
|
{
|
||||||
|
"JwtAuth": []
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "获取项目运行环境信息结构说明",
|
||||||
|
"consumes": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"produces": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"项目运行环境配置Api"
|
||||||
|
],
|
||||||
|
"summary": "获取项目运行环境信息结构说明",
|
||||||
|
"responses": {
|
||||||
|
"200": {
|
||||||
|
"description": "OK"
|
||||||
|
},
|
||||||
|
"401": {
|
||||||
|
"description": "Unauthorized",
|
||||||
|
"schema": {
|
||||||
|
"$ref": "#/definitions/dto.ErrorDto"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"404": {
|
||||||
|
"description": "Not Found",
|
||||||
|
"schema": {
|
||||||
|
"$ref": "#/definitions/dto.ErrorDto"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"500": {
|
||||||
|
"description": "Internal Server Error",
|
||||||
|
"schema": {
|
||||||
|
"$ref": "#/definitions/dto.ErrorDto"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"/api/v1/runconfig/list": {
|
"/api/v1/runconfig/list": {
|
||||||
"get": {
|
"get": {
|
||||||
"security": [
|
"security": [
|
||||||
@ -3387,49 +3432,6 @@ const docTemplate = `{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"/api/v1/simulation/getDataChannelName": {
|
|
||||||
"get": {
|
|
||||||
"security": [
|
|
||||||
{
|
|
||||||
"JwtAuth": []
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"description": "获取仿真信息更新通道名称",
|
|
||||||
"consumes": [
|
|
||||||
"application/json"
|
|
||||||
],
|
|
||||||
"produces": [
|
|
||||||
"application/json"
|
|
||||||
],
|
|
||||||
"tags": [
|
|
||||||
"ATS测试仿真Api"
|
|
||||||
],
|
|
||||||
"summary": "获取仿真信息更新通道名称",
|
|
||||||
"parameters": [
|
|
||||||
{
|
|
||||||
"type": "string",
|
|
||||||
"description": "JWT Token",
|
|
||||||
"name": "Authorization",
|
|
||||||
"in": "header",
|
|
||||||
"required": true
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"responses": {
|
|
||||||
"200": {
|
|
||||||
"description": "OK",
|
|
||||||
"schema": {
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"500": {
|
|
||||||
"description": "Internal Server Error",
|
|
||||||
"schema": {
|
|
||||||
"$ref": "#/definitions/dto.ErrorDto"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"/api/v1/simulation/ibp/btn/operation": {
|
"/api/v1/simulation/ibp/btn/operation": {
|
||||||
"post": {
|
"post": {
|
||||||
"security": [
|
"security": [
|
||||||
@ -3534,7 +3536,105 @@ const docTemplate = `{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"/api/v1/simulation/ibp/operation": {
|
"/api/v1/simulation/list": {
|
||||||
|
"get": {
|
||||||
|
"security": [
|
||||||
|
{
|
||||||
|
"JwtAuth": []
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "获取ATS测试系统所有仿真实例的基本信息",
|
||||||
|
"consumes": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"produces": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"ATS测试仿真Api"
|
||||||
|
],
|
||||||
|
"summary": "获取ATS测试系统所有仿真实例的基本信息",
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"type": "string",
|
||||||
|
"description": "JWT Token",
|
||||||
|
"name": "Authorization",
|
||||||
|
"in": "header",
|
||||||
|
"required": true
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"responses": {
|
||||||
|
"200": {
|
||||||
|
"description": "OK",
|
||||||
|
"schema": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"$ref": "#/definitions/dto.SimulationInfoRspDto"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"500": {
|
||||||
|
"description": "Internal Server Error",
|
||||||
|
"schema": {
|
||||||
|
"$ref": "#/definitions/dto.ErrorDto"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"/api/v1/simulation/psd/operation": {
|
||||||
|
"post": {
|
||||||
|
"security": [
|
||||||
|
{
|
||||||
|
"JwtAuth": []
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "屏蔽门操作",
|
||||||
|
"consumes": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"produces": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"ATS测试仿真Api"
|
||||||
|
],
|
||||||
|
"summary": "屏蔽门操作",
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"type": "string",
|
||||||
|
"description": "JWT Token",
|
||||||
|
"name": "Authorization",
|
||||||
|
"in": "header",
|
||||||
|
"required": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "屏蔽门操作",
|
||||||
|
"name": "PsdOperationReq",
|
||||||
|
"in": "body",
|
||||||
|
"required": true,
|
||||||
|
"schema": {
|
||||||
|
"$ref": "#/definitions/request_proto.PsdOperationReq"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"responses": {
|
||||||
|
"200": {
|
||||||
|
"description": "OK",
|
||||||
|
"schema": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"500": {
|
||||||
|
"description": "Internal Server Error",
|
||||||
|
"schema": {
|
||||||
|
"$ref": "#/definitions/dto.ErrorDto"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"/api/v1/simulation/psl/operation": {
|
||||||
"post": {
|
"post": {
|
||||||
"security": [
|
"security": [
|
||||||
{
|
{
|
||||||
@ -3586,52 +3686,6 @@ const docTemplate = `{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"/api/v1/simulation/list": {
|
|
||||||
"get": {
|
|
||||||
"security": [
|
|
||||||
{
|
|
||||||
"JwtAuth": []
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"description": "获取ATS测试系统所有仿真实例的基本信息",
|
|
||||||
"consumes": [
|
|
||||||
"application/json"
|
|
||||||
],
|
|
||||||
"produces": [
|
|
||||||
"application/json"
|
|
||||||
],
|
|
||||||
"tags": [
|
|
||||||
"ATS测试仿真Api"
|
|
||||||
],
|
|
||||||
"summary": "获取ATS测试系统所有仿真实例的基本信息",
|
|
||||||
"parameters": [
|
|
||||||
{
|
|
||||||
"type": "string",
|
|
||||||
"description": "JWT Token",
|
|
||||||
"name": "Authorization",
|
|
||||||
"in": "header",
|
|
||||||
"required": true
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"responses": {
|
|
||||||
"200": {
|
|
||||||
"description": "OK",
|
|
||||||
"schema": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"$ref": "#/definitions/dto.SimulationInfoRspDto"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"500": {
|
|
||||||
"description": "Internal Server Error",
|
|
||||||
"schema": {
|
|
||||||
"$ref": "#/definitions/dto.ErrorDto"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"/api/v1/simulation/relay/operation": {
|
"/api/v1/simulation/relay/operation": {
|
||||||
"post": {
|
"post": {
|
||||||
"security": [
|
"security": [
|
||||||
@ -5295,14 +5349,16 @@ const docTemplate = `{
|
|||||||
"type": "integer"
|
"type": "integer"
|
||||||
},
|
},
|
||||||
"operation": {
|
"operation": {
|
||||||
"$ref": "#/definitions/request_proto.Section_AxleOperation"
|
"$ref": "#/definitions/request_proto.Section_Operation"
|
||||||
},
|
|
||||||
"reset": {
|
|
||||||
"description": "当操作为直接复位或预复位时有效,true-复位,false-取消或结束复位",
|
|
||||||
"type": "boolean"
|
|
||||||
},
|
},
|
||||||
"simulationId": {
|
"simulationId": {
|
||||||
"type": "string"
|
"type": "string"
|
||||||
|
},
|
||||||
|
"trainIn": {
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"trainOut": {
|
||||||
|
"type": "boolean"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -5682,6 +5738,10 @@ const docTemplate = `{
|
|||||||
"projectId": {
|
"projectId": {
|
||||||
"description": "项目id",
|
"description": "项目id",
|
||||||
"type": "integer"
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"runConfigId": {
|
||||||
|
"description": "运行环境ID",
|
||||||
|
"type": "integer"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -5703,6 +5763,10 @@ const docTemplate = `{
|
|||||||
"description": "项目ID",
|
"description": "项目ID",
|
||||||
"type": "integer"
|
"type": "integer"
|
||||||
},
|
},
|
||||||
|
"runConfigId": {
|
||||||
|
"description": "运行环境ID",
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
"simulationId": {
|
"simulationId": {
|
||||||
"description": "仿真id",
|
"description": "仿真id",
|
||||||
"type": "string"
|
"type": "string"
|
||||||
@ -5724,6 +5788,10 @@ const docTemplate = `{
|
|||||||
"projectId": {
|
"projectId": {
|
||||||
"type": "integer"
|
"type": "integer"
|
||||||
},
|
},
|
||||||
|
"runConfigId": {
|
||||||
|
"description": "运行环境ID",
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
"simulationId": {
|
"simulationId": {
|
||||||
"type": "string"
|
"type": "string"
|
||||||
}
|
}
|
||||||
@ -6048,25 +6116,94 @@ const docTemplate = `{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"request_proto.Section_AxleOperation": {
|
"request_proto.PsdOperationReq": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"deviceId": {
|
||||||
|
"description": "设备id",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"mapId": {
|
||||||
|
"description": "图id",
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"operation": {
|
||||||
|
"description": "操作",
|
||||||
|
"allOf": [
|
||||||
|
{
|
||||||
|
"$ref": "#/definitions/request_proto.Psd_Operation"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"simulationId": {
|
||||||
|
"description": "仿真id",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"request_proto.Psd_Operation": {
|
||||||
"type": "integer",
|
"type": "integer",
|
||||||
"enum": [
|
"enum": [
|
||||||
0,
|
0,
|
||||||
1,
|
1,
|
||||||
2,
|
2,
|
||||||
3
|
3,
|
||||||
|
4,
|
||||||
|
5,
|
||||||
|
6,
|
||||||
|
7,
|
||||||
|
8,
|
||||||
|
9
|
||||||
],
|
],
|
||||||
"x-enum-comments": {
|
"x-enum-comments": {
|
||||||
"Section_Drst": "设置计轴直接复位",
|
"Psd_CancelGm": "取消关门",
|
||||||
"Section_Pdrst": "设置计轴预复位",
|
"Psd_CancelKm4": "取消四编组开门",
|
||||||
"Section_TrainIn": "设置计轴区段内有车轴",
|
"Psd_CancelKm8": "取消八编组开门",
|
||||||
"Section_TrainOut": "设置计轴区段内没有车轴"
|
"Psd_ForceGm": "强制关门",
|
||||||
|
"Psd_ForceKm4": "强制四编组开门",
|
||||||
|
"Psd_ForceKm8": "强制八编组开门",
|
||||||
|
"Psd_Gm": "关门",
|
||||||
|
"Psd_Km4": "四编组开门",
|
||||||
|
"Psd_Km8": "八编组开门"
|
||||||
},
|
},
|
||||||
"x-enum-varnames": [
|
"x-enum-varnames": [
|
||||||
"Section_Drst",
|
"Psd_Undefined",
|
||||||
"Section_Pdrst",
|
"Psd_Km4",
|
||||||
"Section_TrainIn",
|
"Psd_CancelKm4",
|
||||||
"Section_TrainOut"
|
"Psd_Km8",
|
||||||
|
"Psd_CancelKm8",
|
||||||
|
"Psd_Gm",
|
||||||
|
"Psd_CancelGm",
|
||||||
|
"Psd_ForceKm4",
|
||||||
|
"Psd_ForceKm8",
|
||||||
|
"Psd_ForceGm"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"request_proto.Section_Operation": {
|
||||||
|
"type": "integer",
|
||||||
|
"enum": [
|
||||||
|
0,
|
||||||
|
1,
|
||||||
|
2,
|
||||||
|
3,
|
||||||
|
4,
|
||||||
|
5
|
||||||
|
],
|
||||||
|
"x-enum-comments": {
|
||||||
|
"Section_CancelDrst": "取消计轴直接复位",
|
||||||
|
"Section_CancelFaultOcc": "取消故障占用",
|
||||||
|
"Section_CancelPdrst": "取消计轴预复位",
|
||||||
|
"Section_SetDrst": "设置计轴直接复位",
|
||||||
|
"Section_SetFaultOcc": "设置故障占用",
|
||||||
|
"Section_SetPdrst": "设置计轴预复位"
|
||||||
|
},
|
||||||
|
"x-enum-varnames": [
|
||||||
|
"Section_SetDrst",
|
||||||
|
"Section_CancelDrst",
|
||||||
|
"Section_SetPdrst",
|
||||||
|
"Section_CancelPdrst",
|
||||||
|
"Section_SetFaultOcc",
|
||||||
|
"Section_CancelFaultOcc"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"request_proto.Signal_Operation": {
|
"request_proto.Signal_Operation": {
|
||||||
@ -6150,15 +6287,21 @@ const docTemplate = `{
|
|||||||
5,
|
5,
|
||||||
6,
|
6,
|
||||||
7,
|
7,
|
||||||
8
|
8,
|
||||||
|
9,
|
||||||
|
10,
|
||||||
|
11
|
||||||
],
|
],
|
||||||
"x-enum-comments": {
|
"x-enum-comments": {
|
||||||
"Turnout_CancelDC": "取消定操",
|
"Turnout_CancelDC": "取消定操",
|
||||||
"Turnout_CancelFC": "取消反操",
|
"Turnout_CancelFC": "取消反操",
|
||||||
|
"Turnout_CancelForce": "取消强制",
|
||||||
"Turnout_CancelJC": "取消挤岔故障",
|
"Turnout_CancelJC": "取消挤岔故障",
|
||||||
"Turnout_CancelSB": "取消失表故障",
|
"Turnout_CancelSB": "取消失表故障",
|
||||||
"Turnout_DC": "定操",
|
"Turnout_DC": "定操",
|
||||||
"Turnout_FC": "反操",
|
"Turnout_FC": "反操",
|
||||||
|
"Turnout_ForceDw": "强制定位",
|
||||||
|
"Turnout_ForceFw": "强制反位",
|
||||||
"Turnout_SetJC": "设置挤岔故障",
|
"Turnout_SetJC": "设置挤岔故障",
|
||||||
"Turnout_SetSB": "设置失表故障",
|
"Turnout_SetSB": "设置失表故障",
|
||||||
"Turnout_Undefined": "未定义"
|
"Turnout_Undefined": "未定义"
|
||||||
@ -6172,7 +6315,10 @@ const docTemplate = `{
|
|||||||
"Turnout_SetSB",
|
"Turnout_SetSB",
|
||||||
"Turnout_CancelSB",
|
"Turnout_CancelSB",
|
||||||
"Turnout_SetJC",
|
"Turnout_SetJC",
|
||||||
"Turnout_CancelJC"
|
"Turnout_CancelJC",
|
||||||
|
"Turnout_ForceDw",
|
||||||
|
"Turnout_ForceFw",
|
||||||
|
"Turnout_CancelForce"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"state.Signal_Aspect": {
|
"state.Signal_Aspect": {
|
||||||
|
@ -2751,7 +2751,8 @@
|
|||||||
{
|
{
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"name": "config",
|
"name": "config",
|
||||||
"in": "query"
|
"in": "query",
|
||||||
|
"required": true
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "string",
|
"type": "string",
|
||||||
@ -2766,7 +2767,8 @@
|
|||||||
{
|
{
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"name": "name",
|
"name": "name",
|
||||||
"in": "query"
|
"in": "query",
|
||||||
|
"required": true
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"responses": {
|
"responses": {
|
||||||
@ -2794,6 +2796,49 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"/api/v1/runconfig/description": {
|
||||||
|
"get": {
|
||||||
|
"security": [
|
||||||
|
{
|
||||||
|
"JwtAuth": []
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "获取项目运行环境信息结构说明",
|
||||||
|
"consumes": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"produces": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"项目运行环境配置Api"
|
||||||
|
],
|
||||||
|
"summary": "获取项目运行环境信息结构说明",
|
||||||
|
"responses": {
|
||||||
|
"200": {
|
||||||
|
"description": "OK"
|
||||||
|
},
|
||||||
|
"401": {
|
||||||
|
"description": "Unauthorized",
|
||||||
|
"schema": {
|
||||||
|
"$ref": "#/definitions/dto.ErrorDto"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"404": {
|
||||||
|
"description": "Not Found",
|
||||||
|
"schema": {
|
||||||
|
"$ref": "#/definitions/dto.ErrorDto"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"500": {
|
||||||
|
"description": "Internal Server Error",
|
||||||
|
"schema": {
|
||||||
|
"$ref": "#/definitions/dto.ErrorDto"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"/api/v1/runconfig/list": {
|
"/api/v1/runconfig/list": {
|
||||||
"get": {
|
"get": {
|
||||||
"security": [
|
"security": [
|
||||||
@ -3380,49 +3425,6 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"/api/v1/simulation/getDataChannelName": {
|
|
||||||
"get": {
|
|
||||||
"security": [
|
|
||||||
{
|
|
||||||
"JwtAuth": []
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"description": "获取仿真信息更新通道名称",
|
|
||||||
"consumes": [
|
|
||||||
"application/json"
|
|
||||||
],
|
|
||||||
"produces": [
|
|
||||||
"application/json"
|
|
||||||
],
|
|
||||||
"tags": [
|
|
||||||
"ATS测试仿真Api"
|
|
||||||
],
|
|
||||||
"summary": "获取仿真信息更新通道名称",
|
|
||||||
"parameters": [
|
|
||||||
{
|
|
||||||
"type": "string",
|
|
||||||
"description": "JWT Token",
|
|
||||||
"name": "Authorization",
|
|
||||||
"in": "header",
|
|
||||||
"required": true
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"responses": {
|
|
||||||
"200": {
|
|
||||||
"description": "OK",
|
|
||||||
"schema": {
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"500": {
|
|
||||||
"description": "Internal Server Error",
|
|
||||||
"schema": {
|
|
||||||
"$ref": "#/definitions/dto.ErrorDto"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"/api/v1/simulation/ibp/btn/operation": {
|
"/api/v1/simulation/ibp/btn/operation": {
|
||||||
"post": {
|
"post": {
|
||||||
"security": [
|
"security": [
|
||||||
@ -3527,7 +3529,105 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"/api/v1/simulation/ibp/operation": {
|
"/api/v1/simulation/list": {
|
||||||
|
"get": {
|
||||||
|
"security": [
|
||||||
|
{
|
||||||
|
"JwtAuth": []
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "获取ATS测试系统所有仿真实例的基本信息",
|
||||||
|
"consumes": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"produces": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"ATS测试仿真Api"
|
||||||
|
],
|
||||||
|
"summary": "获取ATS测试系统所有仿真实例的基本信息",
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"type": "string",
|
||||||
|
"description": "JWT Token",
|
||||||
|
"name": "Authorization",
|
||||||
|
"in": "header",
|
||||||
|
"required": true
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"responses": {
|
||||||
|
"200": {
|
||||||
|
"description": "OK",
|
||||||
|
"schema": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"$ref": "#/definitions/dto.SimulationInfoRspDto"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"500": {
|
||||||
|
"description": "Internal Server Error",
|
||||||
|
"schema": {
|
||||||
|
"$ref": "#/definitions/dto.ErrorDto"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"/api/v1/simulation/psd/operation": {
|
||||||
|
"post": {
|
||||||
|
"security": [
|
||||||
|
{
|
||||||
|
"JwtAuth": []
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "屏蔽门操作",
|
||||||
|
"consumes": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"produces": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"ATS测试仿真Api"
|
||||||
|
],
|
||||||
|
"summary": "屏蔽门操作",
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"type": "string",
|
||||||
|
"description": "JWT Token",
|
||||||
|
"name": "Authorization",
|
||||||
|
"in": "header",
|
||||||
|
"required": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "屏蔽门操作",
|
||||||
|
"name": "PsdOperationReq",
|
||||||
|
"in": "body",
|
||||||
|
"required": true,
|
||||||
|
"schema": {
|
||||||
|
"$ref": "#/definitions/request_proto.PsdOperationReq"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"responses": {
|
||||||
|
"200": {
|
||||||
|
"description": "OK",
|
||||||
|
"schema": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"500": {
|
||||||
|
"description": "Internal Server Error",
|
||||||
|
"schema": {
|
||||||
|
"$ref": "#/definitions/dto.ErrorDto"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"/api/v1/simulation/psl/operation": {
|
||||||
"post": {
|
"post": {
|
||||||
"security": [
|
"security": [
|
||||||
{
|
{
|
||||||
@ -3579,52 +3679,6 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"/api/v1/simulation/list": {
|
|
||||||
"get": {
|
|
||||||
"security": [
|
|
||||||
{
|
|
||||||
"JwtAuth": []
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"description": "获取ATS测试系统所有仿真实例的基本信息",
|
|
||||||
"consumes": [
|
|
||||||
"application/json"
|
|
||||||
],
|
|
||||||
"produces": [
|
|
||||||
"application/json"
|
|
||||||
],
|
|
||||||
"tags": [
|
|
||||||
"ATS测试仿真Api"
|
|
||||||
],
|
|
||||||
"summary": "获取ATS测试系统所有仿真实例的基本信息",
|
|
||||||
"parameters": [
|
|
||||||
{
|
|
||||||
"type": "string",
|
|
||||||
"description": "JWT Token",
|
|
||||||
"name": "Authorization",
|
|
||||||
"in": "header",
|
|
||||||
"required": true
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"responses": {
|
|
||||||
"200": {
|
|
||||||
"description": "OK",
|
|
||||||
"schema": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"$ref": "#/definitions/dto.SimulationInfoRspDto"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"500": {
|
|
||||||
"description": "Internal Server Error",
|
|
||||||
"schema": {
|
|
||||||
"$ref": "#/definitions/dto.ErrorDto"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"/api/v1/simulation/relay/operation": {
|
"/api/v1/simulation/relay/operation": {
|
||||||
"post": {
|
"post": {
|
||||||
"security": [
|
"security": [
|
||||||
@ -5288,14 +5342,16 @@
|
|||||||
"type": "integer"
|
"type": "integer"
|
||||||
},
|
},
|
||||||
"operation": {
|
"operation": {
|
||||||
"$ref": "#/definitions/request_proto.Section_AxleOperation"
|
"$ref": "#/definitions/request_proto.Section_Operation"
|
||||||
},
|
|
||||||
"reset": {
|
|
||||||
"description": "当操作为直接复位或预复位时有效,true-复位,false-取消或结束复位",
|
|
||||||
"type": "boolean"
|
|
||||||
},
|
},
|
||||||
"simulationId": {
|
"simulationId": {
|
||||||
"type": "string"
|
"type": "string"
|
||||||
|
},
|
||||||
|
"trainIn": {
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"trainOut": {
|
||||||
|
"type": "boolean"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -5675,6 +5731,10 @@
|
|||||||
"projectId": {
|
"projectId": {
|
||||||
"description": "项目id",
|
"description": "项目id",
|
||||||
"type": "integer"
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"runConfigId": {
|
||||||
|
"description": "运行环境ID",
|
||||||
|
"type": "integer"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -5696,6 +5756,10 @@
|
|||||||
"description": "项目ID",
|
"description": "项目ID",
|
||||||
"type": "integer"
|
"type": "integer"
|
||||||
},
|
},
|
||||||
|
"runConfigId": {
|
||||||
|
"description": "运行环境ID",
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
"simulationId": {
|
"simulationId": {
|
||||||
"description": "仿真id",
|
"description": "仿真id",
|
||||||
"type": "string"
|
"type": "string"
|
||||||
@ -5717,6 +5781,10 @@
|
|||||||
"projectId": {
|
"projectId": {
|
||||||
"type": "integer"
|
"type": "integer"
|
||||||
},
|
},
|
||||||
|
"runConfigId": {
|
||||||
|
"description": "运行环境ID",
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
"simulationId": {
|
"simulationId": {
|
||||||
"type": "string"
|
"type": "string"
|
||||||
}
|
}
|
||||||
@ -6041,25 +6109,94 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"request_proto.Section_AxleOperation": {
|
"request_proto.PsdOperationReq": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"deviceId": {
|
||||||
|
"description": "设备id",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"mapId": {
|
||||||
|
"description": "图id",
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"operation": {
|
||||||
|
"description": "操作",
|
||||||
|
"allOf": [
|
||||||
|
{
|
||||||
|
"$ref": "#/definitions/request_proto.Psd_Operation"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"simulationId": {
|
||||||
|
"description": "仿真id",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"request_proto.Psd_Operation": {
|
||||||
"type": "integer",
|
"type": "integer",
|
||||||
"enum": [
|
"enum": [
|
||||||
0,
|
0,
|
||||||
1,
|
1,
|
||||||
2,
|
2,
|
||||||
3
|
3,
|
||||||
|
4,
|
||||||
|
5,
|
||||||
|
6,
|
||||||
|
7,
|
||||||
|
8,
|
||||||
|
9
|
||||||
],
|
],
|
||||||
"x-enum-comments": {
|
"x-enum-comments": {
|
||||||
"Section_Drst": "设置计轴直接复位",
|
"Psd_CancelGm": "取消关门",
|
||||||
"Section_Pdrst": "设置计轴预复位",
|
"Psd_CancelKm4": "取消四编组开门",
|
||||||
"Section_TrainIn": "设置计轴区段内有车轴",
|
"Psd_CancelKm8": "取消八编组开门",
|
||||||
"Section_TrainOut": "设置计轴区段内没有车轴"
|
"Psd_ForceGm": "强制关门",
|
||||||
|
"Psd_ForceKm4": "强制四编组开门",
|
||||||
|
"Psd_ForceKm8": "强制八编组开门",
|
||||||
|
"Psd_Gm": "关门",
|
||||||
|
"Psd_Km4": "四编组开门",
|
||||||
|
"Psd_Km8": "八编组开门"
|
||||||
},
|
},
|
||||||
"x-enum-varnames": [
|
"x-enum-varnames": [
|
||||||
"Section_Drst",
|
"Psd_Undefined",
|
||||||
"Section_Pdrst",
|
"Psd_Km4",
|
||||||
"Section_TrainIn",
|
"Psd_CancelKm4",
|
||||||
"Section_TrainOut"
|
"Psd_Km8",
|
||||||
|
"Psd_CancelKm8",
|
||||||
|
"Psd_Gm",
|
||||||
|
"Psd_CancelGm",
|
||||||
|
"Psd_ForceKm4",
|
||||||
|
"Psd_ForceKm8",
|
||||||
|
"Psd_ForceGm"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"request_proto.Section_Operation": {
|
||||||
|
"type": "integer",
|
||||||
|
"enum": [
|
||||||
|
0,
|
||||||
|
1,
|
||||||
|
2,
|
||||||
|
3,
|
||||||
|
4,
|
||||||
|
5
|
||||||
|
],
|
||||||
|
"x-enum-comments": {
|
||||||
|
"Section_CancelDrst": "取消计轴直接复位",
|
||||||
|
"Section_CancelFaultOcc": "取消故障占用",
|
||||||
|
"Section_CancelPdrst": "取消计轴预复位",
|
||||||
|
"Section_SetDrst": "设置计轴直接复位",
|
||||||
|
"Section_SetFaultOcc": "设置故障占用",
|
||||||
|
"Section_SetPdrst": "设置计轴预复位"
|
||||||
|
},
|
||||||
|
"x-enum-varnames": [
|
||||||
|
"Section_SetDrst",
|
||||||
|
"Section_CancelDrst",
|
||||||
|
"Section_SetPdrst",
|
||||||
|
"Section_CancelPdrst",
|
||||||
|
"Section_SetFaultOcc",
|
||||||
|
"Section_CancelFaultOcc"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"request_proto.Signal_Operation": {
|
"request_proto.Signal_Operation": {
|
||||||
@ -6143,15 +6280,21 @@
|
|||||||
5,
|
5,
|
||||||
6,
|
6,
|
||||||
7,
|
7,
|
||||||
8
|
8,
|
||||||
|
9,
|
||||||
|
10,
|
||||||
|
11
|
||||||
],
|
],
|
||||||
"x-enum-comments": {
|
"x-enum-comments": {
|
||||||
"Turnout_CancelDC": "取消定操",
|
"Turnout_CancelDC": "取消定操",
|
||||||
"Turnout_CancelFC": "取消反操",
|
"Turnout_CancelFC": "取消反操",
|
||||||
|
"Turnout_CancelForce": "取消强制",
|
||||||
"Turnout_CancelJC": "取消挤岔故障",
|
"Turnout_CancelJC": "取消挤岔故障",
|
||||||
"Turnout_CancelSB": "取消失表故障",
|
"Turnout_CancelSB": "取消失表故障",
|
||||||
"Turnout_DC": "定操",
|
"Turnout_DC": "定操",
|
||||||
"Turnout_FC": "反操",
|
"Turnout_FC": "反操",
|
||||||
|
"Turnout_ForceDw": "强制定位",
|
||||||
|
"Turnout_ForceFw": "强制反位",
|
||||||
"Turnout_SetJC": "设置挤岔故障",
|
"Turnout_SetJC": "设置挤岔故障",
|
||||||
"Turnout_SetSB": "设置失表故障",
|
"Turnout_SetSB": "设置失表故障",
|
||||||
"Turnout_Undefined": "未定义"
|
"Turnout_Undefined": "未定义"
|
||||||
@ -6165,7 +6308,10 @@
|
|||||||
"Turnout_SetSB",
|
"Turnout_SetSB",
|
||||||
"Turnout_CancelSB",
|
"Turnout_CancelSB",
|
||||||
"Turnout_SetJC",
|
"Turnout_SetJC",
|
||||||
"Turnout_CancelJC"
|
"Turnout_CancelJC",
|
||||||
|
"Turnout_ForceDw",
|
||||||
|
"Turnout_ForceFw",
|
||||||
|
"Turnout_CancelForce"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"state.Signal_Aspect": {
|
"state.Signal_Aspect": {
|
||||||
|
@ -67,12 +67,13 @@ definitions:
|
|||||||
mapId:
|
mapId:
|
||||||
type: integer
|
type: integer
|
||||||
operation:
|
operation:
|
||||||
$ref: '#/definitions/request_proto.Section_AxleOperation'
|
$ref: '#/definitions/request_proto.Section_Operation'
|
||||||
reset:
|
|
||||||
description: 当操作为直接复位或预复位时有效,true-复位,false-取消或结束复位
|
|
||||||
type: boolean
|
|
||||||
simulationId:
|
simulationId:
|
||||||
type: string
|
type: string
|
||||||
|
trainIn:
|
||||||
|
type: boolean
|
||||||
|
trainOut:
|
||||||
|
type: boolean
|
||||||
required:
|
required:
|
||||||
- id
|
- id
|
||||||
- mapId
|
- mapId
|
||||||
@ -333,6 +334,9 @@ definitions:
|
|||||||
projectId:
|
projectId:
|
||||||
description: 项目id
|
description: 项目id
|
||||||
type: integer
|
type: integer
|
||||||
|
runConfigId:
|
||||||
|
description: 运行环境ID
|
||||||
|
type: integer
|
||||||
type: object
|
type: object
|
||||||
dto.SimulationCreateRspDto:
|
dto.SimulationCreateRspDto:
|
||||||
properties:
|
properties:
|
||||||
@ -347,6 +351,9 @@ definitions:
|
|||||||
projectId:
|
projectId:
|
||||||
description: 项目ID
|
description: 项目ID
|
||||||
type: integer
|
type: integer
|
||||||
|
runConfigId:
|
||||||
|
description: 运行环境ID
|
||||||
|
type: integer
|
||||||
simulationId:
|
simulationId:
|
||||||
description: 仿真id
|
description: 仿真id
|
||||||
type: string
|
type: string
|
||||||
@ -361,6 +368,9 @@ definitions:
|
|||||||
type: array
|
type: array
|
||||||
projectId:
|
projectId:
|
||||||
type: integer
|
type: integer
|
||||||
|
runConfigId:
|
||||||
|
description: 运行环境ID
|
||||||
|
type: integer
|
||||||
simulationId:
|
simulationId:
|
||||||
type: string
|
type: string
|
||||||
type: object
|
type: object
|
||||||
@ -592,23 +602,79 @@ definitions:
|
|||||||
description: 名称
|
description: 名称
|
||||||
type: string
|
type: string
|
||||||
type: object
|
type: object
|
||||||
request_proto.Section_AxleOperation:
|
request_proto.Psd_Operation:
|
||||||
enum:
|
enum:
|
||||||
- 0
|
- 0
|
||||||
- 1
|
- 1
|
||||||
- 2
|
- 2
|
||||||
- 3
|
- 3
|
||||||
|
- 4
|
||||||
|
- 5
|
||||||
|
- 6
|
||||||
|
- 7
|
||||||
|
- 8
|
||||||
|
- 9
|
||||||
type: integer
|
type: integer
|
||||||
x-enum-comments:
|
x-enum-comments:
|
||||||
Section_Drst: 设置计轴直接复位
|
Psd_CancelGm: 取消关门
|
||||||
Section_Pdrst: 设置计轴预复位
|
Psd_CancelKm4: 取消四编组开门
|
||||||
Section_TrainIn: 设置计轴区段内有车轴
|
Psd_CancelKm8: 取消八编组开门
|
||||||
Section_TrainOut: 设置计轴区段内没有车轴
|
Psd_ForceGm: 强制关门
|
||||||
|
Psd_ForceKm4: 强制四编组开门
|
||||||
|
Psd_ForceKm8: 强制八编组开门
|
||||||
|
Psd_Gm: 关门
|
||||||
|
Psd_Km4: 四编组开门
|
||||||
|
Psd_Km8: 八编组开门
|
||||||
x-enum-varnames:
|
x-enum-varnames:
|
||||||
- Section_Drst
|
- Psd_Undefined
|
||||||
- Section_Pdrst
|
- Psd_Km4
|
||||||
- Section_TrainIn
|
- Psd_CancelKm4
|
||||||
- Section_TrainOut
|
- Psd_Km8
|
||||||
|
- Psd_CancelKm8
|
||||||
|
- Psd_Gm
|
||||||
|
- Psd_CancelGm
|
||||||
|
- Psd_ForceKm4
|
||||||
|
- Psd_ForceKm8
|
||||||
|
- Psd_ForceGm
|
||||||
|
request_proto.PsdOperationReq:
|
||||||
|
properties:
|
||||||
|
deviceId:
|
||||||
|
description: 设备id
|
||||||
|
type: string
|
||||||
|
mapId:
|
||||||
|
description: 图id
|
||||||
|
type: integer
|
||||||
|
operation:
|
||||||
|
allOf:
|
||||||
|
- $ref: '#/definitions/request_proto.Psd_Operation'
|
||||||
|
description: 操作
|
||||||
|
simulationId:
|
||||||
|
description: 仿真id
|
||||||
|
type: string
|
||||||
|
type: object
|
||||||
|
request_proto.Section_Operation:
|
||||||
|
enum:
|
||||||
|
- 0
|
||||||
|
- 1
|
||||||
|
- 2
|
||||||
|
- 3
|
||||||
|
- 4
|
||||||
|
- 5
|
||||||
|
type: integer
|
||||||
|
x-enum-comments:
|
||||||
|
Section_CancelDrst: 取消计轴直接复位
|
||||||
|
Section_CancelFaultOcc: 取消故障占用
|
||||||
|
Section_CancelPdrst: 取消计轴预复位
|
||||||
|
Section_SetDrst: 设置计轴直接复位
|
||||||
|
Section_SetFaultOcc: 设置故障占用
|
||||||
|
Section_SetPdrst: 设置计轴预复位
|
||||||
|
x-enum-varnames:
|
||||||
|
- Section_SetDrst
|
||||||
|
- Section_CancelDrst
|
||||||
|
- Section_SetPdrst
|
||||||
|
- Section_CancelPdrst
|
||||||
|
- Section_SetFaultOcc
|
||||||
|
- Section_CancelFaultOcc
|
||||||
request_proto.Signal_Operation:
|
request_proto.Signal_Operation:
|
||||||
enum:
|
enum:
|
||||||
- 0
|
- 0
|
||||||
@ -661,14 +727,20 @@ definitions:
|
|||||||
- 6
|
- 6
|
||||||
- 7
|
- 7
|
||||||
- 8
|
- 8
|
||||||
|
- 9
|
||||||
|
- 10
|
||||||
|
- 11
|
||||||
type: integer
|
type: integer
|
||||||
x-enum-comments:
|
x-enum-comments:
|
||||||
Turnout_CancelDC: 取消定操
|
Turnout_CancelDC: 取消定操
|
||||||
Turnout_CancelFC: 取消反操
|
Turnout_CancelFC: 取消反操
|
||||||
|
Turnout_CancelForce: 取消强制
|
||||||
Turnout_CancelJC: 取消挤岔故障
|
Turnout_CancelJC: 取消挤岔故障
|
||||||
Turnout_CancelSB: 取消失表故障
|
Turnout_CancelSB: 取消失表故障
|
||||||
Turnout_DC: 定操
|
Turnout_DC: 定操
|
||||||
Turnout_FC: 反操
|
Turnout_FC: 反操
|
||||||
|
Turnout_ForceDw: 强制定位
|
||||||
|
Turnout_ForceFw: 强制反位
|
||||||
Turnout_SetJC: 设置挤岔故障
|
Turnout_SetJC: 设置挤岔故障
|
||||||
Turnout_SetSB: 设置失表故障
|
Turnout_SetSB: 设置失表故障
|
||||||
Turnout_Undefined: 未定义
|
Turnout_Undefined: 未定义
|
||||||
@ -682,6 +754,9 @@ definitions:
|
|||||||
- Turnout_CancelSB
|
- Turnout_CancelSB
|
||||||
- Turnout_SetJC
|
- Turnout_SetJC
|
||||||
- Turnout_CancelJC
|
- Turnout_CancelJC
|
||||||
|
- Turnout_ForceDw
|
||||||
|
- Turnout_ForceFw
|
||||||
|
- Turnout_CancelForce
|
||||||
request_proto.TurnoutOperationReq:
|
request_proto.TurnoutOperationReq:
|
||||||
properties:
|
properties:
|
||||||
deviceId:
|
deviceId:
|
||||||
@ -2464,6 +2539,7 @@ paths:
|
|||||||
parameters:
|
parameters:
|
||||||
- in: query
|
- in: query
|
||||||
name: config
|
name: config
|
||||||
|
required: true
|
||||||
type: string
|
type: string
|
||||||
- in: query
|
- in: query
|
||||||
name: description
|
name: description
|
||||||
@ -2473,6 +2549,7 @@ paths:
|
|||||||
type: integer
|
type: integer
|
||||||
- in: query
|
- in: query
|
||||||
name: name
|
name: name
|
||||||
|
required: true
|
||||||
type: string
|
type: string
|
||||||
produces:
|
produces:
|
||||||
- application/json
|
- application/json
|
||||||
@ -2604,6 +2681,33 @@ paths:
|
|||||||
summary: 修改项目运行环境信息
|
summary: 修改项目运行环境信息
|
||||||
tags:
|
tags:
|
||||||
- 项目运行环境配置Api
|
- 项目运行环境配置Api
|
||||||
|
/api/v1/runconfig/description:
|
||||||
|
get:
|
||||||
|
consumes:
|
||||||
|
- application/json
|
||||||
|
description: 获取项目运行环境信息结构说明
|
||||||
|
produces:
|
||||||
|
- application/json
|
||||||
|
responses:
|
||||||
|
"200":
|
||||||
|
description: OK
|
||||||
|
"401":
|
||||||
|
description: Unauthorized
|
||||||
|
schema:
|
||||||
|
$ref: '#/definitions/dto.ErrorDto'
|
||||||
|
"404":
|
||||||
|
description: Not Found
|
||||||
|
schema:
|
||||||
|
$ref: '#/definitions/dto.ErrorDto'
|
||||||
|
"500":
|
||||||
|
description: Internal Server Error
|
||||||
|
schema:
|
||||||
|
$ref: '#/definitions/dto.ErrorDto'
|
||||||
|
security:
|
||||||
|
- JwtAuth: []
|
||||||
|
summary: 获取项目运行环境信息结构说明
|
||||||
|
tags:
|
||||||
|
- 项目运行环境配置Api
|
||||||
/api/v1/runconfig/list:
|
/api/v1/runconfig/list:
|
||||||
get:
|
get:
|
||||||
consumes:
|
consumes:
|
||||||
@ -2869,33 +2973,6 @@ paths:
|
|||||||
summary: ATS测试-ESB按钮操作
|
summary: ATS测试-ESB按钮操作
|
||||||
tags:
|
tags:
|
||||||
- ATS测试仿真Api
|
- ATS测试仿真Api
|
||||||
/api/v1/simulation/getDataChannelName:
|
|
||||||
get:
|
|
||||||
consumes:
|
|
||||||
- application/json
|
|
||||||
description: 获取仿真信息更新通道名称
|
|
||||||
parameters:
|
|
||||||
- description: JWT Token
|
|
||||||
in: header
|
|
||||||
name: Authorization
|
|
||||||
required: true
|
|
||||||
type: string
|
|
||||||
produces:
|
|
||||||
- application/json
|
|
||||||
responses:
|
|
||||||
"200":
|
|
||||||
description: OK
|
|
||||||
schema:
|
|
||||||
type: string
|
|
||||||
"500":
|
|
||||||
description: Internal Server Error
|
|
||||||
schema:
|
|
||||||
$ref: '#/definitions/dto.ErrorDto'
|
|
||||||
security:
|
|
||||||
- JwtAuth: []
|
|
||||||
summary: 获取仿真信息更新通道名称
|
|
||||||
tags:
|
|
||||||
- ATS测试仿真Api
|
|
||||||
/api/v1/simulation/ibp/btn/operation:
|
/api/v1/simulation/ibp/btn/operation:
|
||||||
post:
|
post:
|
||||||
consumes:
|
consumes:
|
||||||
@ -2962,7 +3039,69 @@ paths:
|
|||||||
summary: ATS测试-IBP钥匙操作
|
summary: ATS测试-IBP钥匙操作
|
||||||
tags:
|
tags:
|
||||||
- ATS测试仿真Api
|
- ATS测试仿真Api
|
||||||
/api/v1/simulation/ibp/operation:
|
/api/v1/simulation/list:
|
||||||
|
get:
|
||||||
|
consumes:
|
||||||
|
- application/json
|
||||||
|
description: 获取ATS测试系统所有仿真实例的基本信息
|
||||||
|
parameters:
|
||||||
|
- description: JWT Token
|
||||||
|
in: header
|
||||||
|
name: Authorization
|
||||||
|
required: true
|
||||||
|
type: string
|
||||||
|
produces:
|
||||||
|
- application/json
|
||||||
|
responses:
|
||||||
|
"200":
|
||||||
|
description: OK
|
||||||
|
schema:
|
||||||
|
items:
|
||||||
|
$ref: '#/definitions/dto.SimulationInfoRspDto'
|
||||||
|
type: array
|
||||||
|
"500":
|
||||||
|
description: Internal Server Error
|
||||||
|
schema:
|
||||||
|
$ref: '#/definitions/dto.ErrorDto'
|
||||||
|
security:
|
||||||
|
- JwtAuth: []
|
||||||
|
summary: 获取ATS测试系统所有仿真实例的基本信息
|
||||||
|
tags:
|
||||||
|
- ATS测试仿真Api
|
||||||
|
/api/v1/simulation/psd/operation:
|
||||||
|
post:
|
||||||
|
consumes:
|
||||||
|
- application/json
|
||||||
|
description: 屏蔽门操作
|
||||||
|
parameters:
|
||||||
|
- description: JWT Token
|
||||||
|
in: header
|
||||||
|
name: Authorization
|
||||||
|
required: true
|
||||||
|
type: string
|
||||||
|
- description: 屏蔽门操作
|
||||||
|
in: body
|
||||||
|
name: PsdOperationReq
|
||||||
|
required: true
|
||||||
|
schema:
|
||||||
|
$ref: '#/definitions/request_proto.PsdOperationReq'
|
||||||
|
produces:
|
||||||
|
- application/json
|
||||||
|
responses:
|
||||||
|
"200":
|
||||||
|
description: OK
|
||||||
|
schema:
|
||||||
|
type: string
|
||||||
|
"500":
|
||||||
|
description: Internal Server Error
|
||||||
|
schema:
|
||||||
|
$ref: '#/definitions/dto.ErrorDto'
|
||||||
|
security:
|
||||||
|
- JwtAuth: []
|
||||||
|
summary: 屏蔽门操作
|
||||||
|
tags:
|
||||||
|
- ATS测试仿真Api
|
||||||
|
/api/v1/simulation/psl/operation:
|
||||||
post:
|
post:
|
||||||
consumes:
|
consumes:
|
||||||
- application/json
|
- application/json
|
||||||
@ -2995,35 +3134,6 @@ paths:
|
|||||||
summary: PSL操作
|
summary: PSL操作
|
||||||
tags:
|
tags:
|
||||||
- ATS测试仿真Api
|
- ATS测试仿真Api
|
||||||
/api/v1/simulation/list:
|
|
||||||
get:
|
|
||||||
consumes:
|
|
||||||
- application/json
|
|
||||||
description: 获取ATS测试系统所有仿真实例的基本信息
|
|
||||||
parameters:
|
|
||||||
- description: JWT Token
|
|
||||||
in: header
|
|
||||||
name: Authorization
|
|
||||||
required: true
|
|
||||||
type: string
|
|
||||||
produces:
|
|
||||||
- application/json
|
|
||||||
responses:
|
|
||||||
"200":
|
|
||||||
description: OK
|
|
||||||
schema:
|
|
||||||
items:
|
|
||||||
$ref: '#/definitions/dto.SimulationInfoRspDto'
|
|
||||||
type: array
|
|
||||||
"500":
|
|
||||||
description: Internal Server Error
|
|
||||||
schema:
|
|
||||||
$ref: '#/definitions/dto.ErrorDto'
|
|
||||||
security:
|
|
||||||
- JwtAuth: []
|
|
||||||
summary: 获取ATS测试系统所有仿真实例的基本信息
|
|
||||||
tags:
|
|
||||||
- ATS测试仿真Api
|
|
||||||
/api/v1/simulation/relay/operation:
|
/api/v1/simulation/relay/operation:
|
||||||
post:
|
post:
|
||||||
consumes:
|
consumes:
|
||||||
|
@ -13,6 +13,7 @@ const (
|
|||||||
// DataOperationError 数据操作错误(增删改查操作出了意料之外的错误都算)
|
// DataOperationError 数据操作错误(增删改查操作出了意料之外的错误都算)
|
||||||
DataOperationError = 2002
|
DataOperationError = 2002
|
||||||
ArgumentParseError = 3000
|
ArgumentParseError = 3000
|
||||||
|
ArgumentError = 3001 //参数错误。指参数对应的数据不存在等情况
|
||||||
|
|
||||||
NoAuthOperationError = 4001
|
NoAuthOperationError = 4001
|
||||||
|
|
||||||
|
@ -23,6 +23,13 @@ type ProjectRunConfigDto struct {
|
|||||||
UpdateAt JsonTime `json:"updateAt" time_format:"2006-01-02 15:04:05"`
|
UpdateAt JsonTime `json:"updateAt" time_format:"2006-01-02 15:04:05"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type RunConfigDescription struct {
|
||||||
|
FieldName string `json:"fieldName" form:"fieldName"`
|
||||||
|
Description string `json:"description" form:"description"`
|
||||||
|
Type string `json:"type" form:"type"`
|
||||||
|
ItemTypeFields []*RunConfigDescription `json:"itemTypeFields" form:"itemTypeFields"`
|
||||||
|
}
|
||||||
|
|
||||||
func ConvertToRunConfigDto(gi *model.ProjectRunConfig) *ProjectRunConfigDto {
|
func ConvertToRunConfigDto(gi *model.ProjectRunConfig) *ProjectRunConfigDto {
|
||||||
return &ProjectRunConfigDto{
|
return &ProjectRunConfigDto{
|
||||||
Id: gi.ID,
|
Id: gi.ID,
|
||||||
|
@ -174,98 +174,133 @@ func (Signal_Operation) EnumDescriptor() ([]byte, []int) {
|
|||||||
return file_request_proto_rawDescGZIP(), []int{2, 0}
|
return file_request_proto_rawDescGZIP(), []int{2, 0}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 计轴操作
|
// 区段操作
|
||||||
type Section_AxleOperation int32
|
type Section_Operation int32
|
||||||
|
|
||||||
const (
|
const (
|
||||||
Section_Drst Section_AxleOperation = 0 //设置计轴直接复位
|
Section_SetDrst Section_Operation = 0 //设置计轴直接复位
|
||||||
Section_Pdrst Section_AxleOperation = 1 //设置计轴预复位
|
Section_CancelDrst Section_Operation = 1 //取消计轴直接复位
|
||||||
|
Section_SetPdrst Section_Operation = 2 //设置计轴预复位
|
||||||
|
Section_CancelPdrst Section_Operation = 3 //取消计轴预复位
|
||||||
|
Section_SetFaultOcc Section_Operation = 4 //设置故障占用
|
||||||
|
Section_CancelFaultOcc Section_Operation = 5 //取消故障占用
|
||||||
)
|
)
|
||||||
|
|
||||||
// Enum value maps for Section_AxleOperation.
|
// Enum value maps for Section_Operation.
|
||||||
var (
|
var (
|
||||||
Section_AxleOperation_name = map[int32]string{
|
Section_Operation_name = map[int32]string{
|
||||||
0: "Drst",
|
0: "SetDrst",
|
||||||
1: "Pdrst",
|
1: "CancelDrst",
|
||||||
|
2: "SetPdrst",
|
||||||
|
3: "CancelPdrst",
|
||||||
|
4: "SetFaultOcc",
|
||||||
|
5: "CancelFaultOcc",
|
||||||
}
|
}
|
||||||
Section_AxleOperation_value = map[string]int32{
|
Section_Operation_value = map[string]int32{
|
||||||
"Drst": 0,
|
"SetDrst": 0,
|
||||||
"Pdrst": 1,
|
"CancelDrst": 1,
|
||||||
|
"SetPdrst": 2,
|
||||||
|
"CancelPdrst": 3,
|
||||||
|
"SetFaultOcc": 4,
|
||||||
|
"CancelFaultOcc": 5,
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
func (x Section_AxleOperation) Enum() *Section_AxleOperation {
|
func (x Section_Operation) Enum() *Section_Operation {
|
||||||
p := new(Section_AxleOperation)
|
p := new(Section_Operation)
|
||||||
*p = x
|
*p = x
|
||||||
return p
|
return p
|
||||||
}
|
}
|
||||||
|
|
||||||
func (x Section_AxleOperation) String() string {
|
func (x Section_Operation) String() string {
|
||||||
return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
|
return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
|
||||||
}
|
}
|
||||||
|
|
||||||
func (Section_AxleOperation) Descriptor() protoreflect.EnumDescriptor {
|
func (Section_Operation) Descriptor() protoreflect.EnumDescriptor {
|
||||||
return file_request_proto_enumTypes[2].Descriptor()
|
return file_request_proto_enumTypes[2].Descriptor()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (Section_AxleOperation) Type() protoreflect.EnumType {
|
func (Section_Operation) Type() protoreflect.EnumType {
|
||||||
return &file_request_proto_enumTypes[2]
|
return &file_request_proto_enumTypes[2]
|
||||||
}
|
}
|
||||||
|
|
||||||
func (x Section_AxleOperation) Number() protoreflect.EnumNumber {
|
func (x Section_Operation) Number() protoreflect.EnumNumber {
|
||||||
return protoreflect.EnumNumber(x)
|
return protoreflect.EnumNumber(x)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Deprecated: Use Section_AxleOperation.Descriptor instead.
|
// Deprecated: Use Section_Operation.Descriptor instead.
|
||||||
func (Section_AxleOperation) EnumDescriptor() ([]byte, []int) {
|
func (Section_Operation) EnumDescriptor() ([]byte, []int) {
|
||||||
return file_request_proto_rawDescGZIP(), []int{3, 0}
|
return file_request_proto_rawDescGZIP(), []int{3, 0}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 区段操作
|
type Psd_Operation int32
|
||||||
type Section_SectionOperation int32
|
|
||||||
|
|
||||||
const (
|
const (
|
||||||
Section_SetFaultOcc Section_SectionOperation = 0 //设置故障占用
|
Psd_Undefined Psd_Operation = 0
|
||||||
Section_CancelFaultOcc Section_SectionOperation = 1 //取消故障占用
|
Psd_Km4 Psd_Operation = 1 //四编组开门
|
||||||
|
Psd_CancelKm4 Psd_Operation = 2 //取消四编组开门
|
||||||
|
Psd_Km8 Psd_Operation = 3 //八编组开门
|
||||||
|
Psd_CancelKm8 Psd_Operation = 4 //取消八编组开门
|
||||||
|
Psd_Gm Psd_Operation = 5 //关门
|
||||||
|
Psd_CancelGm Psd_Operation = 6 //取消关门
|
||||||
|
Psd_ForceKm4 Psd_Operation = 7 //强制四编组开门
|
||||||
|
Psd_ForceKm8 Psd_Operation = 8 //强制八编组开门
|
||||||
|
Psd_ForceGm Psd_Operation = 9 //强制关门
|
||||||
)
|
)
|
||||||
|
|
||||||
// Enum value maps for Section_SectionOperation.
|
// Enum value maps for Psd_Operation.
|
||||||
var (
|
var (
|
||||||
Section_SectionOperation_name = map[int32]string{
|
Psd_Operation_name = map[int32]string{
|
||||||
0: "SetFaultOcc",
|
0: "Undefined",
|
||||||
1: "CancelFaultOcc",
|
1: "Km4",
|
||||||
|
2: "CancelKm4",
|
||||||
|
3: "Km8",
|
||||||
|
4: "CancelKm8",
|
||||||
|
5: "Gm",
|
||||||
|
6: "CancelGm",
|
||||||
|
7: "ForceKm4",
|
||||||
|
8: "ForceKm8",
|
||||||
|
9: "ForceGm",
|
||||||
}
|
}
|
||||||
Section_SectionOperation_value = map[string]int32{
|
Psd_Operation_value = map[string]int32{
|
||||||
"SetFaultOcc": 0,
|
"Undefined": 0,
|
||||||
"CancelFaultOcc": 1,
|
"Km4": 1,
|
||||||
|
"CancelKm4": 2,
|
||||||
|
"Km8": 3,
|
||||||
|
"CancelKm8": 4,
|
||||||
|
"Gm": 5,
|
||||||
|
"CancelGm": 6,
|
||||||
|
"ForceKm4": 7,
|
||||||
|
"ForceKm8": 8,
|
||||||
|
"ForceGm": 9,
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
func (x Section_SectionOperation) Enum() *Section_SectionOperation {
|
func (x Psd_Operation) Enum() *Psd_Operation {
|
||||||
p := new(Section_SectionOperation)
|
p := new(Psd_Operation)
|
||||||
*p = x
|
*p = x
|
||||||
return p
|
return p
|
||||||
}
|
}
|
||||||
|
|
||||||
func (x Section_SectionOperation) String() string {
|
func (x Psd_Operation) String() string {
|
||||||
return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
|
return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
|
||||||
}
|
}
|
||||||
|
|
||||||
func (Section_SectionOperation) Descriptor() protoreflect.EnumDescriptor {
|
func (Psd_Operation) Descriptor() protoreflect.EnumDescriptor {
|
||||||
return file_request_proto_enumTypes[3].Descriptor()
|
return file_request_proto_enumTypes[3].Descriptor()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (Section_SectionOperation) Type() protoreflect.EnumType {
|
func (Psd_Operation) Type() protoreflect.EnumType {
|
||||||
return &file_request_proto_enumTypes[3]
|
return &file_request_proto_enumTypes[3]
|
||||||
}
|
}
|
||||||
|
|
||||||
func (x Section_SectionOperation) Number() protoreflect.EnumNumber {
|
func (x Psd_Operation) Number() protoreflect.EnumNumber {
|
||||||
return protoreflect.EnumNumber(x)
|
return protoreflect.EnumNumber(x)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Deprecated: Use Section_SectionOperation.Descriptor instead.
|
// Deprecated: Use Psd_Operation.Descriptor instead.
|
||||||
func (Section_SectionOperation) EnumDescriptor() ([]byte, []int) {
|
func (Psd_Operation) EnumDescriptor() ([]byte, []int) {
|
||||||
return file_request_proto_rawDescGZIP(), []int{3, 1}
|
return file_request_proto_rawDescGZIP(), []int{4, 0}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 道岔
|
// 道岔
|
||||||
@ -457,6 +492,117 @@ func (*Section) Descriptor() ([]byte, []int) {
|
|||||||
return file_request_proto_rawDescGZIP(), []int{3}
|
return file_request_proto_rawDescGZIP(), []int{3}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 屏蔽门
|
||||||
|
type Psd struct {
|
||||||
|
state protoimpl.MessageState
|
||||||
|
sizeCache protoimpl.SizeCache
|
||||||
|
unknownFields protoimpl.UnknownFields
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *Psd) Reset() {
|
||||||
|
*x = Psd{}
|
||||||
|
if protoimpl.UnsafeEnabled {
|
||||||
|
mi := &file_request_proto_msgTypes[4]
|
||||||
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
|
ms.StoreMessageInfo(mi)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *Psd) String() string {
|
||||||
|
return protoimpl.X.MessageStringOf(x)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (*Psd) ProtoMessage() {}
|
||||||
|
|
||||||
|
func (x *Psd) ProtoReflect() protoreflect.Message {
|
||||||
|
mi := &file_request_proto_msgTypes[4]
|
||||||
|
if protoimpl.UnsafeEnabled && x != nil {
|
||||||
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
|
if ms.LoadMessageInfo() == nil {
|
||||||
|
ms.StoreMessageInfo(mi)
|
||||||
|
}
|
||||||
|
return ms
|
||||||
|
}
|
||||||
|
return mi.MessageOf(x)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Deprecated: Use Psd.ProtoReflect.Descriptor instead.
|
||||||
|
func (*Psd) Descriptor() ([]byte, []int) {
|
||||||
|
return file_request_proto_rawDescGZIP(), []int{4}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 屏蔽门操作请求
|
||||||
|
type PsdOperationReq struct {
|
||||||
|
state protoimpl.MessageState
|
||||||
|
sizeCache protoimpl.SizeCache
|
||||||
|
unknownFields protoimpl.UnknownFields
|
||||||
|
|
||||||
|
SimulationId string `protobuf:"bytes,1,opt,name=simulationId,proto3" json:"simulationId,omitempty"` // 仿真id
|
||||||
|
MapId int32 `protobuf:"varint,2,opt,name=mapId,proto3" json:"mapId,omitempty"` // 图id
|
||||||
|
DeviceId string `protobuf:"bytes,3,opt,name=deviceId,proto3" json:"deviceId,omitempty"` // 设备id
|
||||||
|
Operation Psd_Operation `protobuf:"varint,4,opt,name=operation,proto3,enum=request.Psd_Operation" json:"operation,omitempty"` // 操作
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *PsdOperationReq) Reset() {
|
||||||
|
*x = PsdOperationReq{}
|
||||||
|
if protoimpl.UnsafeEnabled {
|
||||||
|
mi := &file_request_proto_msgTypes[5]
|
||||||
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
|
ms.StoreMessageInfo(mi)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *PsdOperationReq) String() string {
|
||||||
|
return protoimpl.X.MessageStringOf(x)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (*PsdOperationReq) ProtoMessage() {}
|
||||||
|
|
||||||
|
func (x *PsdOperationReq) ProtoReflect() protoreflect.Message {
|
||||||
|
mi := &file_request_proto_msgTypes[5]
|
||||||
|
if protoimpl.UnsafeEnabled && x != nil {
|
||||||
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
|
if ms.LoadMessageInfo() == nil {
|
||||||
|
ms.StoreMessageInfo(mi)
|
||||||
|
}
|
||||||
|
return ms
|
||||||
|
}
|
||||||
|
return mi.MessageOf(x)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Deprecated: Use PsdOperationReq.ProtoReflect.Descriptor instead.
|
||||||
|
func (*PsdOperationReq) Descriptor() ([]byte, []int) {
|
||||||
|
return file_request_proto_rawDescGZIP(), []int{5}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *PsdOperationReq) GetSimulationId() string {
|
||||||
|
if x != nil {
|
||||||
|
return x.SimulationId
|
||||||
|
}
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *PsdOperationReq) GetMapId() int32 {
|
||||||
|
if x != nil {
|
||||||
|
return x.MapId
|
||||||
|
}
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *PsdOperationReq) GetDeviceId() string {
|
||||||
|
if x != nil {
|
||||||
|
return x.DeviceId
|
||||||
|
}
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *PsdOperationReq) GetOperation() Psd_Operation {
|
||||||
|
if x != nil {
|
||||||
|
return x.Operation
|
||||||
|
}
|
||||||
|
return Psd_Undefined
|
||||||
|
}
|
||||||
|
|
||||||
var File_request_proto protoreflect.FileDescriptor
|
var File_request_proto protoreflect.FileDescriptor
|
||||||
|
|
||||||
var file_request_proto_rawDesc = []byte{
|
var file_request_proto_rawDesc = []byte{
|
||||||
@ -523,24 +669,27 @@ func file_request_proto_rawDescGZIP() []byte {
|
|||||||
}
|
}
|
||||||
|
|
||||||
var file_request_proto_enumTypes = make([]protoimpl.EnumInfo, 4)
|
var file_request_proto_enumTypes = make([]protoimpl.EnumInfo, 4)
|
||||||
var file_request_proto_msgTypes = make([]protoimpl.MessageInfo, 4)
|
var file_request_proto_msgTypes = make([]protoimpl.MessageInfo, 6)
|
||||||
var file_request_proto_goTypes = []interface{}{
|
var file_request_proto_goTypes = []interface{}{
|
||||||
(Turnout_Operation)(0), // 0: request.Turnout.Operation
|
(Turnout_Operation)(0), // 0: request.Turnout.Operation
|
||||||
(Signal_Operation)(0), // 1: request.Signal.Operation
|
(Signal_Operation)(0), // 1: request.Signal.Operation
|
||||||
(Section_AxleOperation)(0), // 2: request.Section.AxleOperation
|
(Section_Operation)(0), // 2: request.Section.Operation
|
||||||
(Section_SectionOperation)(0), // 3: request.Section.SectionOperation
|
(Psd_Operation)(0), // 3: request.Psd.Operation
|
||||||
(*Turnout)(nil), // 4: request.Turnout
|
(*Turnout)(nil), // 4: request.Turnout
|
||||||
(*TurnoutOperationReq)(nil), // 5: request.TurnoutOperationReq
|
(*TurnoutOperationReq)(nil), // 5: request.TurnoutOperationReq
|
||||||
(*Signal)(nil), // 6: request.Signal
|
(*Signal)(nil), // 6: request.Signal
|
||||||
(*Section)(nil), // 7: request.Section
|
(*Section)(nil), // 7: request.Section
|
||||||
|
(*Psd)(nil), // 8: request.Psd
|
||||||
|
(*PsdOperationReq)(nil), // 9: request.PsdOperationReq
|
||||||
}
|
}
|
||||||
var file_request_proto_depIdxs = []int32{
|
var file_request_proto_depIdxs = []int32{
|
||||||
0, // 0: request.TurnoutOperationReq.operation:type_name -> request.Turnout.Operation
|
0, // 0: request.TurnoutOperationReq.operation:type_name -> request.Turnout.Operation
|
||||||
1, // [1:1] is the sub-list for method output_type
|
3, // 1: request.PsdOperationReq.operation:type_name -> request.Psd.Operation
|
||||||
1, // [1:1] is the sub-list for method input_type
|
2, // [2:2] is the sub-list for method output_type
|
||||||
1, // [1:1] is the sub-list for extension type_name
|
2, // [2:2] is the sub-list for method input_type
|
||||||
1, // [1:1] is the sub-list for extension extendee
|
2, // [2:2] is the sub-list for extension type_name
|
||||||
0, // [0:1] is the sub-list for field type_name
|
2, // [2:2] is the sub-list for extension extendee
|
||||||
|
0, // [0:2] is the sub-list for field type_name
|
||||||
}
|
}
|
||||||
|
|
||||||
func init() { file_request_proto_init() }
|
func init() { file_request_proto_init() }
|
||||||
@ -597,6 +746,30 @@ func file_request_proto_init() {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
file_request_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
|
||||||
|
switch v := v.(*Psd); i {
|
||||||
|
case 0:
|
||||||
|
return &v.state
|
||||||
|
case 1:
|
||||||
|
return &v.sizeCache
|
||||||
|
case 2:
|
||||||
|
return &v.unknownFields
|
||||||
|
default:
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
file_request_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
|
||||||
|
switch v := v.(*PsdOperationReq); i {
|
||||||
|
case 0:
|
||||||
|
return &v.state
|
||||||
|
case 1:
|
||||||
|
return &v.sizeCache
|
||||||
|
case 2:
|
||||||
|
return &v.unknownFields
|
||||||
|
default:
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
type x struct{}
|
type x struct{}
|
||||||
out := protoimpl.TypeBuilder{
|
out := protoimpl.TypeBuilder{
|
||||||
@ -604,7 +777,7 @@ func file_request_proto_init() {
|
|||||||
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
|
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
|
||||||
RawDescriptor: file_request_proto_rawDesc,
|
RawDescriptor: file_request_proto_rawDesc,
|
||||||
NumEnums: 4,
|
NumEnums: 4,
|
||||||
NumMessages: 4,
|
NumMessages: 6,
|
||||||
NumExtensions: 0,
|
NumExtensions: 0,
|
||||||
NumServices: 0,
|
NumServices: 0,
|
||||||
},
|
},
|
||||||
|
@ -84,14 +84,16 @@ type SignalOperationReqDto struct {
|
|||||||
Operation request_proto.Signal_Operation `form:"operation" json:"operation" binding:"required"` //信号机操作类型
|
Operation request_proto.Signal_Operation `form:"operation" json:"operation" binding:"required"` //信号机操作类型
|
||||||
Aspect state.Signal_Aspect `form:"aspect" json:"aspect" binding:"required"` // 当操作为Operation.Display时有效,表示显示的信号
|
Aspect state.Signal_Aspect `form:"aspect" json:"aspect" binding:"required"` // 当操作为Operation.Display时有效,表示显示的信号
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// AxleSectionOperationReqDto 计轴区段操作
|
||||||
type AxleSectionOperationReqDto struct {
|
type AxleSectionOperationReqDto struct {
|
||||||
SimulationId string `form:"simulationId" json:"simulationId" binding:"required"`
|
SimulationId string `form:"simulationId" json:"simulationId" binding:"required"`
|
||||||
MapId int32 `json:"mapId" from:"mapId" binding:"required"`
|
MapId int32 `json:"mapId" from:"mapId" binding:"required"`
|
||||||
DeviceId string `form:"id" json:"id" binding:"required"`
|
DeviceId string `form:"id" json:"id" binding:"required"`
|
||||||
Operation request_proto.Section_AxleOperation `form:"operation" json:"operation"`
|
Operation request_proto.Section_Operation `form:"operation" json:"operation"`
|
||||||
Reset bool `form:"reset" json:"reset"` //当操作为直接复位或预复位时有效,true-复位,false-取消或结束复位
|
TrainIn bool `form:"trainIn" json:"trainIn"`
|
||||||
|
TrainOut bool `form:"trainOut" json:"trainOut"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type EsbButtonOperationReqDto struct {
|
type EsbButtonOperationReqDto struct {
|
||||||
SimulationId string `form:"simulationId" json:"simulationId" binding:"required"`
|
SimulationId string `form:"simulationId" json:"simulationId" binding:"required"`
|
||||||
MapId int32 `json:"mapId" from:"mapId" binding:"required"`
|
MapId int32 `json:"mapId" from:"mapId" binding:"required"`
|
||||||
|
@ -2,6 +2,9 @@ package message_server
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"joylink.club/ecs"
|
||||||
|
"joylink.club/rtsssimulation/component"
|
||||||
|
"joylink.club/rtsssimulation/entity"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"google.golang.org/protobuf/proto"
|
"google.golang.org/protobuf/proto"
|
||||||
@ -21,20 +24,20 @@ func NewPSLMs(vs *memory.VerifySimulation, mapId int32) *PslMs {
|
|||||||
return &PslMs{vs: vs, mapId: mapId}
|
return &PslMs{vs: vs, mapId: mapId}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *PslMs) GetChannel() string {
|
func (p *PslMs) GetChannel() string {
|
||||||
return "simulation-psl-%s_%d_%s-status"
|
return "simulation-psl-%s_%d_%s-status"
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *PslMs) GetInterval() time.Duration {
|
func (p *PslMs) GetInterval() time.Duration {
|
||||||
return 200 * time.Millisecond
|
return 200 * time.Millisecond
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *PslMs) OnTick() ([]*ms_api.TopicMsg, error) {
|
func (p *PslMs) OnTick() ([]*ms_api.TopicMsg, error) {
|
||||||
var msgArr []*ms_api.TopicMsg
|
var msgArr []*ms_api.TopicMsg
|
||||||
mapData := memory.QueryGiData[*graphicData.RtssGraphicStorage](r.mapId)
|
mapData := memory.QueryGiData[*graphicData.RtssGraphicStorage](p.mapId)
|
||||||
for _, box := range mapData.GateBoxs {
|
for _, box := range mapData.GateBoxs {
|
||||||
channel := r.handlerPSLChannelName(box.Common.Id)
|
channel := p.handlerPSLChannelName(box.Common.Id)
|
||||||
state, err := r.collectGateBoxPSLState(box)
|
state, err := p.collectGateBoxPSLState(box)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@ -47,40 +50,40 @@ func (r *PslMs) OnTick() ([]*ms_api.TopicMsg, error) {
|
|||||||
return msgArr, nil
|
return msgArr, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *PslMs) OnError(err error) {}
|
func (p *PslMs) OnError(err error) {}
|
||||||
|
|
||||||
// 处理订阅通道名称
|
// 处理订阅通道名称
|
||||||
func (r *PslMs) handlerPSLChannelName(gateBoxId string) string {
|
func (p *PslMs) handlerPSLChannelName(gateBoxId string) string {
|
||||||
return fmt.Sprintf(r.GetChannel(), r.vs.SimulationId, r.mapId, gateBoxId)
|
return fmt.Sprintf(p.GetChannel(), p.vs.SimulationId, p.mapId, gateBoxId)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *PslMs) collectGateBoxPSLState(gatedBox *graphicData.GatedBox) (*state.PushedDevicesStatus, error) {
|
func (p *PslMs) collectGateBoxPSLState(box *graphicData.GatedBox) (*state.PushedDevicesStatus, error) {
|
||||||
//world := s.GetSimulationWorld()
|
world := p.vs.World
|
||||||
//uidStructure := queryUidStructure[*StationUidStructure](mapId)
|
uidStructure := memory.QueryUidStructure[*memory.StationUidStructure](p.mapId)
|
||||||
//boxUid := uidStructure.GateBoxIds[boxId].Uid
|
boxUid := uidStructure.GateBoxIds[box.Common.Id].Uid
|
||||||
//mkxEntry, ok := entity.GetEntityByUid(world, boxUid)
|
mkxEntry, ok := entity.GetEntityByUid(world, boxUid)
|
||||||
//var buttonStateArr []*state.ButtonState
|
if !ok {
|
||||||
//if ok {
|
return nil, fmt.Errorf("[id:%s]的门控箱实体找不到", boxUid)
|
||||||
// mkxCircuit := component.MkxCircuitType.Get(mkxEntry)
|
}
|
||||||
// var boxArr []*ecs.Entry
|
mkx := component.MkxType.Get(mkxEntry)
|
||||||
// boxArr = append(boxArr, mkxCircuit.PcbList...)
|
var buttonStateArr []*state.ButtonState
|
||||||
// boxArr = append(boxArr, mkxCircuit.PobList...)
|
if ok {
|
||||||
// boxArr = append(boxArr, mkxCircuit.PabList...)
|
btnArr := []*ecs.Entry{mkx.PCB, mkx.POB, mkx.PAB}
|
||||||
// for _, mkxBoxEntry := range boxArr {
|
for _, btn := range btnArr {
|
||||||
// mkxBox := component.MkxBoxType.Get(mkxBoxEntry)
|
if btn == nil {
|
||||||
// uid := component.UidType.Get(mkxBox.Btn).Id
|
continue
|
||||||
// down := component.BitStateType.Get(mkxBox.Btn).Val
|
}
|
||||||
// buttonStateArr = append(buttonStateArr, &state.ButtonState{
|
buttonStateArr = append(buttonStateArr, &state.ButtonState{
|
||||||
// Id: uid,
|
Id: component.UidType.Get(btn).Id,
|
||||||
// Down: down,
|
Down: component.BitStateType.Get(btn).Val,
|
||||||
// })
|
Active: component.BitStateType.Get(btn).Val,
|
||||||
// }
|
})
|
||||||
//}
|
}
|
||||||
//return &state.PushedDevicesStatus{
|
}
|
||||||
// All: true,
|
return &state.PushedDevicesStatus{
|
||||||
// AllStatus: &state.AllDevicesStatus{
|
All: true,
|
||||||
// ButtonState: buttonStateArr,
|
AllStatus: &state.AllDevicesStatus{
|
||||||
// },
|
ButtonState: buttonStateArr,
|
||||||
//}
|
},
|
||||||
return nil, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
@ -97,38 +97,22 @@ func (ms *SfpMs) collectPsdStates() ([]*state.PsdState, error) {
|
|||||||
uid := uidStructure.PsdIds[door.Common.Id].Uid
|
uid := uidStructure.PsdIds[door.Common.Id].Uid
|
||||||
psdEntry, ok := entity.GetEntityByUid(world, uid)
|
psdEntry, ok := entity.GetEntityByUid(world, uid)
|
||||||
if ok {
|
if ok {
|
||||||
var amount int32
|
|
||||||
psdState := component.PsdStateType.Get(psdEntry)
|
|
||||||
if psdState.Km8 {
|
|
||||||
amount = 8
|
|
||||||
} else if psdState.Km4 {
|
|
||||||
amount = 4
|
|
||||||
} else {
|
|
||||||
amount = 0
|
|
||||||
}
|
|
||||||
start, end := getStartEndCodeByGroup(door, amount)
|
|
||||||
var openSubDoor []int32
|
var openSubDoor []int32
|
||||||
for i := start; i <= end; i++ {
|
for i, asd := range component.AsdListType.Get(psdEntry).List {
|
||||||
openSubDoor = append(openSubDoor, i)
|
if !component.AsdMotorStateType.Get(asd).MG {
|
||||||
|
openSubDoor = append(openSubDoor, int32(i+1))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
psdStateArr = append(psdStateArr, &state.PsdState{
|
psdStateArr = append(psdStateArr, &state.PsdState{
|
||||||
Id: door.Common.Id,
|
Id: door.Common.Id,
|
||||||
OpenDoorCodes: openSubDoor,
|
Close: component.PsdStateType.Get(psdEntry).Close,
|
||||||
|
OpenAsdCodes: openSubDoor,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return psdStateArr, nil
|
return psdStateArr, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func getStartEndCodeByGroup(door *graphicData.ScreenDoor, groupAmount int32) (int32, int32) {
|
|
||||||
for _, group := range door.ScreenDoorGroupList {
|
|
||||||
if group.TrainGroupAmount == groupAmount {
|
|
||||||
return group.StartSmallDoor, group.EndSmallDoor
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 0, -1
|
|
||||||
}
|
|
||||||
|
|
||||||
// 收集区段状态
|
// 收集区段状态
|
||||||
func (ms *SfpMs) collectSectionStates() ([]*state.SectionState, error) {
|
func (ms *SfpMs) collectSectionStates() ([]*state.SectionState, error) {
|
||||||
uidMap := memory.QueryMapUidMapByType(ms.mapId, &graphicData.Section{})
|
uidMap := memory.QueryMapUidMapByType(ms.mapId, &graphicData.Section{})
|
||||||
@ -150,11 +134,12 @@ func handlerSectionState(w ecs.World, uid string) *state.SectionState {
|
|||||||
//fmt.Printf("id=%s的信号机不存在", uid)
|
//fmt.Printf("id=%s的信号机不存在", uid)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
if entry.HasComponent(component.AxleSectionTag) { //计轴区段
|
if entry.HasComponent(component.AxleSectionType) { //计轴区段
|
||||||
sectionState := &state.SectionState{}
|
sectionState := &state.SectionState{}
|
||||||
axleState := component.AxleSectionStateType.Get(entry)
|
axleState := component.AxleSectionType.Get(entry)
|
||||||
|
sectionFault := component.AxleSectionFaultType.Get(entry)
|
||||||
sectionState.Occupied = axleState.Occ
|
sectionState.Occupied = axleState.Occ
|
||||||
sectionState.Type = state.SectionType_Axle
|
sectionState.AxleFault = sectionFault.SectionFault
|
||||||
return sectionState
|
return sectionState
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
|
Binary file not shown.
@ -1,280 +0,0 @@
|
|||||||
package protobuf
|
|
||||||
|
|
||||||
import (
|
|
||||||
"fmt"
|
|
||||||
"os"
|
|
||||||
"testing"
|
|
||||||
|
|
||||||
"google.golang.org/protobuf/proto"
|
|
||||||
"joylink.club/bj-rtsts-server/ts/protos/graphicData"
|
|
||||||
proto2 "joylink.club/rtsssimulation/repository/model/proto"
|
|
||||||
)
|
|
||||||
|
|
||||||
func TestBuildRepository(t *testing.T) {
|
|
||||||
|
|
||||||
bytes, err := os.ReadFile("./file.bin")
|
|
||||||
dir, _ := os.Getwd()
|
|
||||||
println(dir)
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
storage := &graphicData.RtssGraphicStorage{}
|
|
||||||
err = proto.Unmarshal(bytes, storage)
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
repo := &proto2.Repository{}
|
|
||||||
|
|
||||||
//todo 数据中id为379的区段B端无计轴,临时在代码里修改,后续删除
|
|
||||||
storage.AxleCountings = append(storage.AxleCountings, &graphicData.AxleCounting{
|
|
||||||
Common: &graphicData.CommonInfo{
|
|
||||||
Id: "10000",
|
|
||||||
},
|
|
||||||
KilometerSystem: &graphicData.KilometerSystem{
|
|
||||||
Kilometer: 13403549,
|
|
||||||
CoordinateSystem: "MAIN_LINE",
|
|
||||||
Direction: graphicData.Direction_RIGHT,
|
|
||||||
},
|
|
||||||
AxleCountingRef: []*graphicData.RelatedRef{{
|
|
||||||
DeviceType: graphicData.RelatedRef_Section,
|
|
||||||
Id: "379",
|
|
||||||
DevicePort: graphicData.RelatedRef_B,
|
|
||||||
}},
|
|
||||||
Index: 0,
|
|
||||||
// Invent: false,
|
|
||||||
Type: 0,
|
|
||||||
})
|
|
||||||
|
|
||||||
axleCountingMap := make(map[string]*graphicData.AxleCounting)
|
|
||||||
for _, data := range storage.AxleCountings {
|
|
||||||
if data.KilometerSystem == nil {
|
|
||||||
println(fmt.Sprintf("计轴[%s]缺少公里标", data.Common.Id))
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
axleCountingMap[data.Common.Id] = data
|
|
||||||
cpType := proto2.CheckPointType_AxleCounter
|
|
||||||
// if data.Invent {
|
|
||||||
// cpType = proto2.CheckPointType_Boundary
|
|
||||||
// }
|
|
||||||
cp := &proto2.CheckPoint{
|
|
||||||
Id: data.Common.Id,
|
|
||||||
Km: convertKm(data.KilometerSystem),
|
|
||||||
Type: cpType,
|
|
||||||
DevicePorts: convertDevicePorts(data.AxleCountingRef),
|
|
||||||
}
|
|
||||||
repo.CheckPoints = append(repo.CheckPoints, cp)
|
|
||||||
}
|
|
||||||
for _, data := range storage.Section {
|
|
||||||
var turnoutIds []string
|
|
||||||
if data.SectionType == graphicData.Section_TurnoutPhysical {
|
|
||||||
turnoutIds = findTurnoutIds(axleCountingMap, data.AxleCountings)
|
|
||||||
}
|
|
||||||
physicalSection := &proto2.PhysicalSection{
|
|
||||||
Id: data.Common.Id,
|
|
||||||
ADevicePort: convertDevicePort(data.PaRef),
|
|
||||||
BDevicePort: convertDevicePort(data.PbRef),
|
|
||||||
TurnoutIds: turnoutIds,
|
|
||||||
}
|
|
||||||
repo.PhysicalSections = append(repo.PhysicalSections, physicalSection)
|
|
||||||
}
|
|
||||||
for _, data := range storage.Turnouts {
|
|
||||||
var km *proto2.Kilometer
|
|
||||||
for _, ks := range data.KilometerSystem {
|
|
||||||
if ks.Kilometer != 0 {
|
|
||||||
km = convertKm(ks)
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for _, kc := range buildKmConverts(data.KilometerSystem) {
|
|
||||||
repo.KilometerConverts = append(repo.KilometerConverts, kc)
|
|
||||||
}
|
|
||||||
turnout := &proto2.Turnout{
|
|
||||||
Id: data.Common.Id,
|
|
||||||
Km: km,
|
|
||||||
ADevicePort: convertDevicePort(data.PaRef),
|
|
||||||
BDevicePort: convertDevicePort(data.PbRef),
|
|
||||||
CDevicePort: convertDevicePort(data.PcRef),
|
|
||||||
}
|
|
||||||
repo.Turnouts = append(repo.Turnouts, turnout)
|
|
||||||
}
|
|
||||||
for _, data := range storage.Signals {
|
|
||||||
var sectionId string
|
|
||||||
var turnoutPort *proto2.DevicePort
|
|
||||||
switch data.RefDev.DeviceType {
|
|
||||||
case graphicData.RelatedRef_Section:
|
|
||||||
sectionId = data.RefDev.Id
|
|
||||||
case graphicData.RelatedRef_Turnout:
|
|
||||||
turnoutPort = convertDevicePort(data.RefDev)
|
|
||||||
}
|
|
||||||
signal := &proto2.Signal{
|
|
||||||
Id: data.Common.Id,
|
|
||||||
Km: convertKm(data.KilometerSystem),
|
|
||||||
SectionId: sectionId,
|
|
||||||
TurnoutPort: turnoutPort,
|
|
||||||
}
|
|
||||||
repo.Signals = append(repo.Signals, signal)
|
|
||||||
}
|
|
||||||
for _, data := range storage.Transponders {
|
|
||||||
var sectionId string
|
|
||||||
var turnoutPort *proto2.DevicePort
|
|
||||||
switch data.TransponderRef.DeviceType {
|
|
||||||
case graphicData.RelatedRef_Section:
|
|
||||||
sectionId = data.TransponderRef.Id
|
|
||||||
case graphicData.RelatedRef_Turnout:
|
|
||||||
turnoutPort = convertDevicePort(data.TransponderRef)
|
|
||||||
}
|
|
||||||
responder := &proto2.Transponder{
|
|
||||||
Id: data.Common.Id,
|
|
||||||
Km: convertKm(data.KilometerSystem),
|
|
||||||
SectionId: sectionId,
|
|
||||||
TurnoutPort: turnoutPort,
|
|
||||||
}
|
|
||||||
repo.Transponders = append(repo.Transponders, responder)
|
|
||||||
}
|
|
||||||
slopeKsMap := make(map[string]*graphicData.SlopeKiloMarker)
|
|
||||||
for _, data := range storage.SlopeKiloMarker {
|
|
||||||
slopeKsMap[data.Common.Id] = data
|
|
||||||
for _, kc := range buildKmConverts(data.KilometerSystem) {
|
|
||||||
repo.KilometerConverts = append(repo.KilometerConverts, kc)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
curveKsMap := make(map[string]*graphicData.CurvatureKiloMarker)
|
|
||||||
for _, data := range storage.CurvatureKiloMarker {
|
|
||||||
curveKsMap[data.Common.Id] = data
|
|
||||||
for _, kc := range buildKmConverts(data.KilometerSystem) {
|
|
||||||
repo.KilometerConverts = append(repo.KilometerConverts, kc)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for _, data := range storage.Slopes {
|
|
||||||
var kms []*proto2.Kilometer
|
|
||||||
for _, id := range data.RefDeviceId {
|
|
||||||
kms = append(kms, convertKm(slopeKsMap[id].KilometerSystem[0]))
|
|
||||||
}
|
|
||||||
slope := &proto2.Slope{
|
|
||||||
Id: data.Common.Id,
|
|
||||||
Kms: kms,
|
|
||||||
Degree: data.SlopeNumber,
|
|
||||||
}
|
|
||||||
repo.Slopes = append(repo.Slopes, slope)
|
|
||||||
}
|
|
||||||
for _, data := range storage.Curvatures {
|
|
||||||
var kms []*proto2.Kilometer
|
|
||||||
for _, id := range data.RefDeviceId {
|
|
||||||
kms = append(kms, convertKm(curveKsMap[id].KilometerSystem[0]))
|
|
||||||
}
|
|
||||||
slope := &proto2.SectionalCurvature{
|
|
||||||
Id: data.Common.Id,
|
|
||||||
Kms: kms,
|
|
||||||
Radius: data.CurvatureNumber,
|
|
||||||
}
|
|
||||||
repo.SectionalCurvatures = append(repo.SectionalCurvatures, slope)
|
|
||||||
}
|
|
||||||
repoBytes, err := proto.Marshal(repo)
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
err = os.WriteFile("./repo.bin", repoBytes, os.ModePerm)
|
|
||||||
println(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
func convertKm(ks *graphicData.KilometerSystem) *proto2.Kilometer {
|
|
||||||
var dir proto2.Direction
|
|
||||||
switch ks.Direction {
|
|
||||||
case graphicData.Direction_LEFT:
|
|
||||||
dir = proto2.Direction_LEFT
|
|
||||||
case graphicData.Direction_RIGHT:
|
|
||||||
dir = proto2.Direction_RIGHT
|
|
||||||
}
|
|
||||||
return &proto2.Kilometer{
|
|
||||||
Value: ks.Kilometer,
|
|
||||||
CoordinateSystem: ks.CoordinateSystem,
|
|
||||||
Direction: dir,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func convertDevicePort(ref *graphicData.RelatedRef) *proto2.DevicePort {
|
|
||||||
if ref == nil {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
var deviceType proto2.DeviceType
|
|
||||||
var port proto2.Port
|
|
||||||
switch ref.DevicePort {
|
|
||||||
case graphicData.RelatedRef_A:
|
|
||||||
port = proto2.Port_A
|
|
||||||
case graphicData.RelatedRef_B:
|
|
||||||
port = proto2.Port_B
|
|
||||||
case graphicData.RelatedRef_C:
|
|
||||||
port = proto2.Port_C
|
|
||||||
}
|
|
||||||
switch ref.DeviceType {
|
|
||||||
case graphicData.RelatedRef_Section:
|
|
||||||
deviceType = proto2.DeviceType_DeviceType_PhysicalSection
|
|
||||||
case graphicData.RelatedRef_Turnout:
|
|
||||||
deviceType = proto2.DeviceType_DeviceType_Turnout
|
|
||||||
default:
|
|
||||||
panic(fmt.Sprintf("异常的设备类型-%s", ref.DeviceType))
|
|
||||||
}
|
|
||||||
return &proto2.DevicePort{
|
|
||||||
DeviceId: ref.Id,
|
|
||||||
DeviceType: deviceType,
|
|
||||||
Port: port,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func convertDevicePorts(refList []*graphicData.RelatedRef) []*proto2.DevicePort {
|
|
||||||
var dps []*proto2.DevicePort
|
|
||||||
for _, ref := range refList {
|
|
||||||
dps = append(dps, convertDevicePort(ref))
|
|
||||||
}
|
|
||||||
return dps
|
|
||||||
}
|
|
||||||
|
|
||||||
func findTurnoutIds(axleCountingMap map[string]*graphicData.AxleCounting, axleIds []string) []string {
|
|
||||||
if len(axleIds) <= 2 {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
turnoutMap := make(map[string]bool)
|
|
||||||
for _, axleId := range axleIds {
|
|
||||||
axle := axleCountingMap[axleId]
|
|
||||||
relTurnoutCount := 0
|
|
||||||
var turnoutId string
|
|
||||||
for _, ref := range axle.AxleCountingRef {
|
|
||||||
if ref.DeviceType == graphicData.RelatedRef_Turnout {
|
|
||||||
relTurnoutCount++
|
|
||||||
turnoutId = ref.Id
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if relTurnoutCount == 1 {
|
|
||||||
turnoutMap[turnoutId] = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
var turnoutIds []string
|
|
||||||
for id, _ := range turnoutMap {
|
|
||||||
turnoutIds = append(turnoutIds, id)
|
|
||||||
}
|
|
||||||
return turnoutIds
|
|
||||||
}
|
|
||||||
|
|
||||||
func buildKmConverts(ksList []*graphicData.KilometerSystem) []*proto2.KilometerConvert {
|
|
||||||
var kmConvers []*proto2.KilometerConvert
|
|
||||||
for i, ks := range ksList {
|
|
||||||
if ks.Kilometer == 0 {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
for j := i + 1; j < len(ksList); j++ {
|
|
||||||
if ks.Kilometer == 0 {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
kmConvers = append(kmConvers, buildKmConvert(ks, ksList[j]))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return kmConvers
|
|
||||||
}
|
|
||||||
|
|
||||||
func buildKmConvert(ks1 *graphicData.KilometerSystem, ks2 *graphicData.KilometerSystem) *proto2.KilometerConvert {
|
|
||||||
return &proto2.KilometerConvert{
|
|
||||||
KmA: convertKm(ks1),
|
|
||||||
KmB: convertKm(ks2),
|
|
||||||
SameTrend: false,
|
|
||||||
}
|
|
||||||
}
|
|
@ -1 +1 @@
|
|||||||
Subproject commit e21995b69537f1ac0efbfeefc8517df3fbe9477e
|
Subproject commit d77c37055ba841091f417b1c36fd8d3f6beb15c5
|
23
third_party/axle_device/config.go
vendored
Normal file
23
third_party/axle_device/config.go
vendored
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
package axle_device
|
||||||
|
|
||||||
|
// AxleDeviceConfig CI系统与计轴设备的安全通信协议配置参数
|
||||||
|
// 计轴设备(管理一个集中站的所有计轴器)配置
|
||||||
|
type AxleDeviceConfig struct {
|
||||||
|
SrcAddr uint16 //16位源地址
|
||||||
|
DstAddr uint16 //16位目的地址
|
||||||
|
DataVer1 uint32 //通道1数据版本
|
||||||
|
DataVer2 uint32 //通道2数据版本
|
||||||
|
SID1 uint32 //通道1源标识
|
||||||
|
SID2 uint32 //通道2源标识
|
||||||
|
SINIT1 uint32 //通道1序列初始
|
||||||
|
SINIT2 uint32 //通道2序列初始
|
||||||
|
SendingPeriod uint32 //接收方每个安全通信会话对应的发送周期值,单位ms
|
||||||
|
SSRTimeout uint32 //等待SSR回应的定时器超时值,单位ms
|
||||||
|
Mtv uint32 //每个安全通信会话可容忍的最大时序偏差
|
||||||
|
Udl uint32 //每个安全通信会话RSD应用数据长度发送和接收的配置值(支持固定长度和可变长度);0-可变长度,大于0即固定长度
|
||||||
|
}
|
||||||
|
|
||||||
|
// CheckAddress 检测目标源地址目的地址是否在配置中
|
||||||
|
func (c *AxleDeviceConfig) CheckAddress(srcAddr uint16, dstAddr uint16) bool {
|
||||||
|
return true
|
||||||
|
}
|
41
third_party/axle_device/rssp_server.go
vendored
Normal file
41
third_party/axle_device/rssp_server.go
vendored
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
package axle_device
|
||||||
|
|
||||||
|
import "joylink.club/bj-rtsts-server/third_party/message"
|
||||||
|
|
||||||
|
// 实现rssp通信流程
|
||||||
|
type RsspServer struct {
|
||||||
|
}
|
||||||
|
|
||||||
|
// HandleRsspMsg 处理接收到的rssp报文
|
||||||
|
func (s *RsspServer) HandleRsspMsg(pack []byte, config *AxleDeviceConfig) {
|
||||||
|
//报文头校验
|
||||||
|
head := &message.RsspHead{}
|
||||||
|
if !head.Parse(pack) { //解析报文头失败
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if !message.RsspHeadMcCheck(head) { //报文类别检测未通过
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if !message.RsspHeadPicCheck(head) { //协议交互类别检测未通过
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if !config.CheckAddress(head.Sa, head.Da) { //校验报文头中源地址和目的地址是否包含在已配置列表中
|
||||||
|
return
|
||||||
|
}
|
||||||
|
//报文尾校验
|
||||||
|
if !message.RsspPackCrc16Check(pack) { //整个报文crc16校验未通过
|
||||||
|
return
|
||||||
|
}
|
||||||
|
//解析得到RSD、SSE或SRE
|
||||||
|
rssp := message.ParseRsspPack(head, pack)
|
||||||
|
if rssp == nil { //解析具体rssp包失败
|
||||||
|
return
|
||||||
|
}
|
||||||
|
switch rssp.Type() {
|
||||||
|
case message.RSD_A:
|
||||||
|
fallthrough
|
||||||
|
case message.RSD_B:
|
||||||
|
case message.SSE:
|
||||||
|
case message.SSR:
|
||||||
|
}
|
||||||
|
}
|
3
third_party/dynamics/dynamics.go
vendored
3
third_party/dynamics/dynamics.go
vendored
@ -214,6 +214,9 @@ func (d *dynamics) initDynamicsRunRepository() error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (d *dynamics) Stop() {
|
func (d *dynamics) Stop() {
|
||||||
|
initMutex.Lock()
|
||||||
|
defer initMutex.Unlock()
|
||||||
|
_default = nil
|
||||||
if d.httpClient != nil {
|
if d.httpClient != nil {
|
||||||
d.requestStopSimulation()
|
d.requestStopSimulation()
|
||||||
d.httpClient = nil
|
d.httpClient = nil
|
||||||
|
35
third_party/interlock/interlock.go
vendored
35
third_party/interlock/interlock.go
vendored
@ -15,9 +15,8 @@ import (
|
|||||||
|
|
||||||
// 联锁代理通信接口
|
// 联锁代理通信接口
|
||||||
type InterlockMessageManager interface {
|
type InterlockMessageManager interface {
|
||||||
CollectInterlockRelayInfo() []*message.InterlockSendMsgPkg
|
CollectInterlockRelayInfo(code string) *message.InterlockSendMsgPkg
|
||||||
HandleInterlockDriverInfo(b []byte)
|
HandleInterlockDriverInfo(code string, b []byte)
|
||||||
GetInterlockRunConfig() *config.InterlockConfig
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 联锁接口
|
// 联锁接口
|
||||||
@ -30,16 +29,16 @@ type InterlockProxy interface {
|
|||||||
SendCollectMessage(b []byte)
|
SendCollectMessage(b []byte)
|
||||||
}
|
}
|
||||||
|
|
||||||
var _default InterlockProxy
|
var interlockMap = make(map[string]InterlockProxy)
|
||||||
var initMutex sync.Mutex
|
var initMutex sync.Mutex
|
||||||
|
|
||||||
func Default() InterlockProxy {
|
func Default(c *config.InterlockConfig) InterlockProxy {
|
||||||
initMutex.Lock()
|
initMutex.Lock()
|
||||||
defer initMutex.Unlock()
|
defer initMutex.Unlock()
|
||||||
if _default == nil { // TODO
|
if interlockMap[c.Code] == nil {
|
||||||
_default = &interlockProxy{}
|
interlockMap[c.Code] = &interlockProxy{runConfig: c}
|
||||||
}
|
}
|
||||||
return _default
|
return interlockMap[c.Code]
|
||||||
}
|
}
|
||||||
|
|
||||||
type interlockProxy struct {
|
type interlockProxy struct {
|
||||||
@ -55,21 +54,20 @@ type interlockProxy struct {
|
|||||||
func (i *interlockProxy) handleDriverInfo(b []byte) {
|
func (i *interlockProxy) handleDriverInfo(b []byte) {
|
||||||
handler := i.manager
|
handler := i.manager
|
||||||
if handler != nil {
|
if handler != nil {
|
||||||
handler.HandleInterlockDriverInfo(b)
|
handler.HandleInterlockDriverInfo(i.runConfig.Code, b)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (i *interlockProxy) Start(manager InterlockMessageManager) {
|
func (i *interlockProxy) Start(manager InterlockMessageManager) {
|
||||||
|
if i.runConfig == nil || i.runConfig.Ip == "" || !i.runConfig.Open {
|
||||||
|
return
|
||||||
|
}
|
||||||
if manager == nil {
|
if manager == nil {
|
||||||
panic("启动联锁消息服务错误: InterlockMessageManager不能为nil")
|
panic("启动联锁消息服务错误: InterlockMessageManager不能为nil")
|
||||||
}
|
}
|
||||||
if i.manager != nil {
|
if i.manager != nil {
|
||||||
panic("启动联锁消息服务错误: 存在正在运行的任务")
|
panic("启动联锁消息服务错误: 存在正在运行的任务")
|
||||||
}
|
}
|
||||||
i.runConfig = manager.GetInterlockRunConfig()
|
|
||||||
if i.runConfig == nil || i.runConfig.Ip == "" || !i.runConfig.Open {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
i.manager = manager
|
i.manager = manager
|
||||||
// 初始化客户端、服务端
|
// 初始化客户端、服务端
|
||||||
i.initInterlockProxy()
|
i.initInterlockProxy()
|
||||||
@ -98,17 +96,20 @@ func (i *interlockProxy) collectInfoStateTask(ctx context.Context) {
|
|||||||
return
|
return
|
||||||
default:
|
default:
|
||||||
}
|
}
|
||||||
collectInfoStates := i.manager.CollectInterlockRelayInfo()
|
collectInfoState := i.manager.CollectInterlockRelayInfo(i.runConfig.Code)
|
||||||
for _, state := range collectInfoStates {
|
if collectInfoState != nil {
|
||||||
serialNumber++
|
serialNumber++
|
||||||
state.Header.SerialNumber = serialNumber
|
collectInfoState.Header.SerialNumber = serialNumber
|
||||||
i.sendCollectUdpClient.SendMsg(state)
|
i.sendCollectUdpClient.SendMsg(collectInfoState)
|
||||||
}
|
}
|
||||||
time.Sleep(time.Millisecond * InterlockMessageSendInterval)
|
time.Sleep(time.Millisecond * InterlockMessageSendInterval)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (i *interlockProxy) Stop() {
|
func (i *interlockProxy) Stop() {
|
||||||
|
initMutex.Lock()
|
||||||
|
defer initMutex.Unlock()
|
||||||
|
delete(interlockMap, i.runConfig.Code)
|
||||||
if i.sendCollectUdpClient != nil {
|
if i.sendCollectUdpClient != nil {
|
||||||
i.sendCollectUdpClient.Close()
|
i.sendCollectUdpClient.Close()
|
||||||
}
|
}
|
||||||
|
16
third_party/message/interlock.go
vendored
16
third_party/message/interlock.go
vendored
@ -87,9 +87,9 @@ func boolsToByte(flags [8]bool) byte {
|
|||||||
|
|
||||||
// 收到联锁发来的驱动数据
|
// 收到联锁发来的驱动数据
|
||||||
type InterlockReceiveMsgPkg struct {
|
type InterlockReceiveMsgPkg struct {
|
||||||
toagent_len int32
|
toagent_len int
|
||||||
et_out_num int32
|
et_out_num int
|
||||||
tcc_output_len int32
|
tcc_output_len int
|
||||||
Header *InterlockMsgPkgHeader // 包头
|
Header *InterlockMsgPkgHeader // 包头
|
||||||
SyncZone []byte // 同步区状态
|
SyncZone []byte // 同步区状态
|
||||||
DriveInfo []bool // 驱动数据
|
DriveInfo []bool // 驱动数据
|
||||||
@ -106,18 +106,18 @@ type InterlockResponderMsgPkg struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// ET_OUT_NUM、TOAGENTLEN、TCC_OUTPUT_LEN(应答器数量*131)的具体数值取决于数据配置。
|
// ET_OUT_NUM、TOAGENTLEN、TCC_OUTPUT_LEN(应答器数量*131)的具体数值取决于数据配置。
|
||||||
func NewInterlockReceiveMsgPkg(tlen, etLen, tccLen int32) *InterlockReceiveMsgPkg {
|
func NewInterlockReceiveMsgPkg(tlen, etLen, tccLen int) *InterlockReceiveMsgPkg {
|
||||||
return &InterlockReceiveMsgPkg{
|
return &InterlockReceiveMsgPkg{
|
||||||
toagent_len: tlen,
|
toagent_len: tlen,
|
||||||
et_out_num: etLen,
|
et_out_num: etLen,
|
||||||
tcc_output_len: tccLen,
|
tcc_output_len: tccLen * 131,
|
||||||
Header: &InterlockMsgPkgHeader{},
|
Header: &InterlockMsgPkgHeader{},
|
||||||
Tail: &InterlockMsgPkgTail{},
|
Tail: &InterlockMsgPkgTail{},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *InterlockReceiveMsgPkg) Decode(buf []byte) error {
|
func (t *InterlockReceiveMsgPkg) Decode(buf []byte) error {
|
||||||
var preIndex, lastIndex int32 = 0, 6
|
var preIndex, lastIndex int = 0, 6
|
||||||
// 包头
|
// 包头
|
||||||
t.Header.Decode(buf[preIndex:lastIndex])
|
t.Header.Decode(buf[preIndex:lastIndex])
|
||||||
// 同步区状态
|
// 同步区状态
|
||||||
@ -137,7 +137,7 @@ func (t *InterlockReceiveMsgPkg) Decode(buf []byte) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *InterlockReceiveMsgPkg) parseByte(r []bool, buf []byte, start, end int32) {
|
func (t *InterlockReceiveMsgPkg) parseByte(r []bool, buf []byte, start, end int) {
|
||||||
for i := start; i < end; i++ {
|
for i := start; i < end; i++ {
|
||||||
b := buf[i]
|
b := buf[i]
|
||||||
for bit := 7; bit >= 0; bit-- {
|
for bit := 7; bit >= 0; bit-- {
|
||||||
@ -146,7 +146,7 @@ func (t *InterlockReceiveMsgPkg) parseByte(r []bool, buf []byte, start, end int3
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func parseResponder(buf []byte, start, end int32) []*InterlockResponderMsgPkg {
|
func parseResponder(buf []byte, start, end int) []*InterlockResponderMsgPkg {
|
||||||
var msgs []*InterlockResponderMsgPkg
|
var msgs []*InterlockResponderMsgPkg
|
||||||
for i := start; i < end; i = i + 128 {
|
for i := start; i < end; i = i + 128 {
|
||||||
b := buf[i : i+128]
|
b := buf[i : i+128]
|
||||||
|
101
third_party/message/rssp.go
vendored
101
third_party/message/rssp.go
vendored
@ -3,6 +3,7 @@ package message
|
|||||||
import (
|
import (
|
||||||
"encoding/binary"
|
"encoding/binary"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
//RSSP-1 V1.0 铁路信号安全通信协议
|
//RSSP-1 V1.0 铁路信号安全通信协议
|
||||||
@ -19,6 +20,13 @@ type RsspHead struct {
|
|||||||
Da uint16
|
Da uint16
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (h *RsspHead) Parse(buf []byte) bool {
|
||||||
|
if len(buf) < 6 {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
h.decode(buf)
|
||||||
|
return true
|
||||||
|
}
|
||||||
func (h *RsspHead) Type() RsspType {
|
func (h *RsspHead) Type() RsspType {
|
||||||
return h.Mc
|
return h.Mc
|
||||||
}
|
}
|
||||||
@ -47,10 +55,24 @@ func (h *RsspHead) encode() []byte {
|
|||||||
|
|
||||||
/////////////////////////////////////////////////
|
/////////////////////////////////////////////////
|
||||||
|
|
||||||
|
// RsspPackCrc16Check RSSP报文CRC16校验
|
||||||
|
func RsspPackCrc16Check(pack []byte) bool {
|
||||||
|
if len(pack) <= 2 { //报文长度不够,校验不通过
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
//
|
||||||
|
pack16 := binary.LittleEndian.Uint16(pack[len(pack)-2:])
|
||||||
|
crc16 := RsspCrc16(pack[:len(pack)-2])
|
||||||
|
//
|
||||||
|
return crc16 == pack16
|
||||||
|
}
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////
|
||||||
|
|
||||||
// RsspRsd 实时安全数据包
|
// RsspRsd 实时安全数据包
|
||||||
type RsspRsd struct {
|
type RsspRsd struct {
|
||||||
RsspHead
|
RsspHead
|
||||||
//安全校验域-序列号(4Byte)
|
//安全校验域-序列号(4Byte),可以是一个随时间周期变化的计数器
|
||||||
Sn uint32
|
Sn uint32
|
||||||
//安全校验域-安全数据长度(2Byte)
|
//安全校验域-安全数据长度(2Byte)
|
||||||
Sdl uint16
|
Sdl uint16
|
||||||
@ -224,37 +246,84 @@ type Rssper interface {
|
|||||||
}
|
}
|
||||||
type RsspType = byte
|
type RsspType = byte
|
||||||
|
|
||||||
const (
|
const ( //报文类型
|
||||||
RSD_A = RsspType(0x80)
|
RSD_A = RsspType(0x80)
|
||||||
RSD_B = RsspType(0x81)
|
RSD_B = RsspType(0x81)
|
||||||
SSE = RsspType(0x90)
|
SSE = RsspType(0x90)
|
||||||
SSR = RsspType(0x91)
|
SSR = RsspType(0x91)
|
||||||
)
|
)
|
||||||
|
|
||||||
// ParseRsspPack 解析RSSP数据包
|
// RsspHeadMcCheck 报文类型检测
|
||||||
func ParseRsspPack(pack []byte) (Rssper, error) {
|
func RsspHeadMcCheck(head *RsspHead) bool {
|
||||||
// pack 进行CRC16循环冗余校验,检测整个包的完整性
|
switch head.Mc {
|
||||||
gCrc16 := RsspCrc16(pack[0 : len(pack)-2])
|
case RSD_A:
|
||||||
pCrc16 := binary.LittleEndian.Uint16(pack[len(pack)-2 : len(pack)])
|
return true
|
||||||
if gCrc16 != pCrc16 {
|
case RSD_B:
|
||||||
return nil, fmt.Errorf("ParseRsspPack 整个数据包CRC16校验未通过")
|
return true
|
||||||
|
case SSR:
|
||||||
|
return true
|
||||||
|
case SSE:
|
||||||
|
return true
|
||||||
|
default:
|
||||||
|
return false
|
||||||
}
|
}
|
||||||
//
|
}
|
||||||
ph := &RsspHead{}
|
|
||||||
ph.decode(pack)
|
type PicType = byte
|
||||||
|
|
||||||
|
const ( //协议交互类别
|
||||||
|
PIC_MASTER = PicType(0x01) //主机发送的安全数据
|
||||||
|
PIC_SLAVE = PicType(0x02) //备机发送的安全数据
|
||||||
|
)
|
||||||
|
|
||||||
|
// RsspHeadPicCheck 协议交互类别检测
|
||||||
|
func RsspHeadPicCheck(head *RsspHead) bool {
|
||||||
|
switch head.Pic {
|
||||||
|
case PIC_MASTER:
|
||||||
|
return true
|
||||||
|
case PIC_SLAVE:
|
||||||
|
return true
|
||||||
|
default:
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ParseRsspPack 解析已经校验的RSSP数据包
|
||||||
|
func ParseRsspPack(ph *RsspHead, pack []byte) Rssper {
|
||||||
//
|
//
|
||||||
var codec RsspCodec
|
var codec RsspCodec
|
||||||
switch ph.Mc {
|
switch ph.Mc {
|
||||||
case RSD_A | RSD_B:
|
case RSD_A:
|
||||||
|
fallthrough
|
||||||
|
case RSD_B:
|
||||||
codec = &RsspRsd{}
|
codec = &RsspRsd{}
|
||||||
case SSE:
|
case SSE:
|
||||||
codec = &RsspSse{}
|
codec = &RsspSse{}
|
||||||
case SSR:
|
case SSR:
|
||||||
codec = &RsspSsr{}
|
codec = &RsspSsr{}
|
||||||
default:
|
default:
|
||||||
return nil, fmt.Errorf("ParseRsspPack 无法识别的报文类型码[0x%x]", ph.Mc)
|
return nil
|
||||||
}
|
}
|
||||||
//
|
//
|
||||||
e := codec.Decode(pack)
|
if codec.Decode(pack) == nil {
|
||||||
return codec.(Rssper), e
|
return codec.(Rssper)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// PackToString 字节数组转换为16进制字节字符串
|
||||||
|
func PackToString(pack []byte) string {
|
||||||
|
b := &strings.Builder{}
|
||||||
|
first := true
|
||||||
|
for _, d := range pack {
|
||||||
|
if first {
|
||||||
|
b.WriteString(fmt.Sprintf("0x%0X", d))
|
||||||
|
first = false
|
||||||
|
} else {
|
||||||
|
b.WriteString(fmt.Sprintf(",0x%0X", d))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return b.String()
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
@ -7,11 +7,15 @@ var crc16Table []uint32 = nil
|
|||||||
var crc32C1Table []uint32 = nil
|
var crc32C1Table []uint32 = nil
|
||||||
var crc32C2Table []uint32 = nil
|
var crc32C2Table []uint32 = nil
|
||||||
|
|
||||||
const (
|
const ( //CRC生成多项式
|
||||||
RsspCrc16GX uint32 = 0b1_0000_1000_0001_0001 //生成多项式 G(X)=X16+X11+X4+1
|
RsspCrc16GX uint32 = 0b1_0000_1000_0001_0001 //生成多项式 G(X)=X16+X11+X4+1
|
||||||
RsspCrc32C1 uint32 = 0x100d4e63 //安全通道1 CRC32生成多项式
|
RsspCrc32C1 uint32 = 0x100d4e63 //安全通道1 CRC32生成多项式
|
||||||
RsspCrc32C2 uint32 = 0x8ce56011 //安全通道1 CRC32生成多项式
|
RsspCrc32C2 uint32 = 0x8ce56011 //安全通道1 CRC32生成多项式
|
||||||
)
|
)
|
||||||
|
const ( //时间戳生成多项式
|
||||||
|
RsspTsC1 uint32 = 0x0fc22f87
|
||||||
|
RsspTsC2 uint32 = 0xc3e887e1
|
||||||
|
)
|
||||||
|
|
||||||
// InitRsspCrcTable 初始化RSSP协议中需要的CRC表
|
// InitRsspCrcTable 初始化RSSP协议中需要的CRC表
|
||||||
func InitRsspCrcTable() {
|
func InitRsspCrcTable() {
|
||||||
@ -193,3 +197,47 @@ func Crc(data []byte,
|
|||||||
}
|
}
|
||||||
return (register1 ^ final_xor_value) & significant_mask
|
return (register1 ^ final_xor_value) & significant_mask
|
||||||
}
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
// 线性反馈移位寄存器
|
||||||
|
type RsspLFSR struct {
|
||||||
|
polynomial uint32 //生成多项式
|
||||||
|
width int //寄存器宽度
|
||||||
|
register uint32 //寄存器
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewRsspLFSR(polynomial uint32, width int, init_value uint32) *RsspLFSR {
|
||||||
|
var wd_msb_mask uint32 = 1 << (width - 1)
|
||||||
|
var wd_mask uint32 = 0xffffffff >> (32 - width)
|
||||||
|
polynomial &= wd_mask
|
||||||
|
polynomial = (polynomial >> 1) | wd_msb_mask
|
||||||
|
//
|
||||||
|
return &RsspLFSR{polynomial: polynomial, width: width, register: init_value}
|
||||||
|
}
|
||||||
|
func (r *RsspLFSR) move() {
|
||||||
|
var significant_mask uint32 = 0xffffffff >> (32 - r.width)
|
||||||
|
//
|
||||||
|
r.register &= significant_mask
|
||||||
|
cb := r.register & r.polynomial & significant_mask
|
||||||
|
out := bitXor(cb, r.width)
|
||||||
|
r.register >>= 1
|
||||||
|
r.register = r.register | (out << (r.width - 1))
|
||||||
|
r.register &= significant_mask
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *RsspLFSR) GetAndMove() uint32 {
|
||||||
|
rt := r.register
|
||||||
|
r.move()
|
||||||
|
return rt
|
||||||
|
}
|
||||||
|
|
||||||
|
// return 0 或 1
|
||||||
|
func bitXor(data uint32, width int) uint32 {
|
||||||
|
var v uint32 = 0
|
||||||
|
var lsb_mask uint32 = 1
|
||||||
|
for i := 0; i < width; i++ {
|
||||||
|
v ^= data >> i
|
||||||
|
}
|
||||||
|
return v & lsb_mask
|
||||||
|
}
|
@ -58,6 +58,9 @@ func (s *semiPhysicalTrainImpl) Start(manager SemiPhysicalMessageManager) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (s *semiPhysicalTrainImpl) Stop() {
|
func (s *semiPhysicalTrainImpl) Stop() {
|
||||||
|
initMutex.Lock()
|
||||||
|
defer initMutex.Unlock()
|
||||||
|
_default = nil
|
||||||
if s.trainControlUdpServer != nil {
|
if s.trainControlUdpServer != nil {
|
||||||
s.trainControlUdpServer.Close()
|
s.trainControlUdpServer.Close()
|
||||||
}
|
}
|
||||||
|
@ -267,11 +267,11 @@ type SectionState struct {
|
|||||||
|
|
||||||
// 区段索引
|
// 区段索引
|
||||||
Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
|
Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
|
||||||
// 区段类型
|
|
||||||
Type SectionType `protobuf:"varint,2,opt,name=type,proto3,enum=state.SectionType" json:"type,omitempty"`
|
|
||||||
// 区段占用
|
// 区段占用
|
||||||
// true-占用;false-出清
|
// true-占用;false-出清
|
||||||
Occupied bool `protobuf:"varint,3,opt,name=occupied,proto3" json:"occupied,omitempty"`
|
Occupied bool `protobuf:"varint,3,opt,name=occupied,proto3" json:"occupied,omitempty"`
|
||||||
|
// 计轴故障
|
||||||
|
AxleFault bool `protobuf:"varint,4,opt,name=axleFault,proto3" json:"axleFault,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (x *SectionState) Reset() {
|
func (x *SectionState) Reset() {
|
||||||
@ -313,13 +313,6 @@ func (x *SectionState) GetId() string {
|
|||||||
return ""
|
return ""
|
||||||
}
|
}
|
||||||
|
|
||||||
func (x *SectionState) GetType() SectionType {
|
|
||||||
if x != nil {
|
|
||||||
return x.Type
|
|
||||||
}
|
|
||||||
return SectionType_Any
|
|
||||||
}
|
|
||||||
|
|
||||||
func (x *SectionState) GetOccupied() bool {
|
func (x *SectionState) GetOccupied() bool {
|
||||||
if x != nil {
|
if x != nil {
|
||||||
return x.Occupied
|
return x.Occupied
|
||||||
@ -327,6 +320,13 @@ func (x *SectionState) GetOccupied() bool {
|
|||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (x *SectionState) GetAxleFault() bool {
|
||||||
|
if x != nil {
|
||||||
|
return x.AxleFault
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
// 道岔状态
|
// 道岔状态
|
||||||
type SwitchState struct {
|
type SwitchState struct {
|
||||||
state protoimpl.MessageState
|
state protoimpl.MessageState
|
||||||
@ -343,6 +343,28 @@ type SwitchState struct {
|
|||||||
Dw bool `protobuf:"varint,4,opt,name=dw,proto3" json:"dw,omitempty"`
|
Dw bool `protobuf:"varint,4,opt,name=dw,proto3" json:"dw,omitempty"`
|
||||||
// 道岔处于反位(实际)
|
// 道岔处于反位(实际)
|
||||||
Fw bool `protobuf:"varint,5,opt,name=fw,proto3" json:"fw,omitempty"`
|
Fw bool `protobuf:"varint,5,opt,name=fw,proto3" json:"fw,omitempty"`
|
||||||
|
// 是否强制(屏蔽联锁驱动)
|
||||||
|
Force bool `protobuf:"varint,6,opt,name=force,proto3" json:"force,omitempty"`
|
||||||
|
// 是否有失表故障
|
||||||
|
Sb bool `protobuf:"varint,7,opt,name=sb,proto3" json:"sb,omitempty"`
|
||||||
|
// 是否有定位失表故障
|
||||||
|
Dwsb bool `protobuf:"varint,8,opt,name=dwsb,proto3" json:"dwsb,omitempty"`
|
||||||
|
// 是否有反位失表故障
|
||||||
|
Fwsb bool `protobuf:"varint,9,opt,name=fwsb,proto3" json:"fwsb,omitempty"`
|
||||||
|
// 是否有挤岔故障
|
||||||
|
Jc bool `protobuf:"varint,10,opt,name=jc,proto3" json:"jc,omitempty"`
|
||||||
|
// 定操驱动
|
||||||
|
Qdc bool `protobuf:"varint,11,opt,name=qdc,proto3" json:"qdc,omitempty"`
|
||||||
|
// 反操驱动
|
||||||
|
Qfc bool `protobuf:"varint,12,opt,name=qfc,proto3" json:"qfc,omitempty"`
|
||||||
|
// 允许操驱动
|
||||||
|
Qyc bool `protobuf:"varint,13,opt,name=qyc,proto3" json:"qyc,omitempty"`
|
||||||
|
// 是否定操
|
||||||
|
Dc bool `protobuf:"varint,14,opt,name=dc,proto3" json:"dc,omitempty"`
|
||||||
|
// 是否反操
|
||||||
|
Fc bool `protobuf:"varint,15,opt,name=fc,proto3" json:"fc,omitempty"`
|
||||||
|
// 是否允许操作
|
||||||
|
Yc bool `protobuf:"varint,16,opt,name=yc,proto3" json:"yc,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (x *SwitchState) Reset() {
|
func (x *SwitchState) Reset() {
|
||||||
@ -412,6 +434,83 @@ func (x *SwitchState) GetFw() bool {
|
|||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (x *SwitchState) GetForce() bool {
|
||||||
|
if x != nil {
|
||||||
|
return x.Force
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *SwitchState) GetSb() bool {
|
||||||
|
if x != nil {
|
||||||
|
return x.Sb
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *SwitchState) GetDwsb() bool {
|
||||||
|
if x != nil {
|
||||||
|
return x.Dwsb
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *SwitchState) GetFwsb() bool {
|
||||||
|
if x != nil {
|
||||||
|
return x.Fwsb
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *SwitchState) GetJc() bool {
|
||||||
|
if x != nil {
|
||||||
|
return x.Jc
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *SwitchState) GetQdc() bool {
|
||||||
|
if x != nil {
|
||||||
|
return x.Qdc
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *SwitchState) GetQfc() bool {
|
||||||
|
if x != nil {
|
||||||
|
return x.Qfc
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *SwitchState) GetQyc() bool {
|
||||||
|
if x != nil {
|
||||||
|
return x.Qyc
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *SwitchState) GetDc() bool {
|
||||||
|
if x != nil {
|
||||||
|
return x.Dc
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *SwitchState) GetFc() bool {
|
||||||
|
if x != nil {
|
||||||
|
return x.Fc
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *SwitchState) GetYc() bool {
|
||||||
|
if x != nil {
|
||||||
|
return x.Yc
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
// 信号机状态
|
// 信号机状态
|
||||||
type SignalState struct {
|
type SignalState struct {
|
||||||
state protoimpl.MessageState
|
state protoimpl.MessageState
|
||||||
@ -643,6 +742,8 @@ type TrainState struct {
|
|||||||
TrainKilometer int64 `protobuf:"varint,14,opt,name=trainKilometer,proto3" json:"trainKilometer,omitempty"`
|
TrainKilometer int64 `protobuf:"varint,14,opt,name=trainKilometer,proto3" json:"trainKilometer,omitempty"`
|
||||||
// 控制响应延时
|
// 控制响应延时
|
||||||
ControlDelayTime int64 `protobuf:"varint,15,opt,name=controlDelayTime,proto3" json:"controlDelayTime,omitempty"`
|
ControlDelayTime int64 `protobuf:"varint,15,opt,name=controlDelayTime,proto3" json:"controlDelayTime,omitempty"`
|
||||||
|
// 列车车头所在设备UID
|
||||||
|
HeadDeviceUId string `protobuf:"bytes,16,opt,name=headDeviceUId,proto3" json:"headDeviceUId,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (x *TrainState) Reset() {
|
func (x *TrainState) Reset() {
|
||||||
@ -782,6 +883,13 @@ func (x *TrainState) GetControlDelayTime() int64 {
|
|||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (x *TrainState) GetHeadDeviceUId() string {
|
||||||
|
if x != nil {
|
||||||
|
return x.HeadDeviceUId
|
||||||
|
}
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
// 动力学列车状态
|
// 动力学列车状态
|
||||||
type TrainDynamicState struct {
|
type TrainDynamicState struct {
|
||||||
state protoimpl.MessageState
|
state protoimpl.MessageState
|
||||||
@ -1536,7 +1644,8 @@ type PsdState struct {
|
|||||||
unknownFields protoimpl.UnknownFields
|
unknownFields protoimpl.UnknownFields
|
||||||
|
|
||||||
Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` //屏蔽门的id
|
Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` //屏蔽门的id
|
||||||
OpenDoorCodes []int32 `protobuf:"varint,2,rep,packed,name=openDoorCodes,proto3" json:"openDoorCodes,omitempty"` //开启的小门的编号
|
OpenAsdCodes []int32 `protobuf:"varint,2,rep,packed,name=openAsdCodes,proto3" json:"openAsdCodes,omitempty"` //开启的滑动门的编号
|
||||||
|
Close bool `protobuf:"varint,3,opt,name=close,proto3" json:"close,omitempty"` //屏蔽门整体的关闭(继电器)状态
|
||||||
}
|
}
|
||||||
|
|
||||||
func (x *PsdState) Reset() {
|
func (x *PsdState) Reset() {
|
||||||
@ -1578,13 +1687,20 @@ func (x *PsdState) GetId() string {
|
|||||||
return ""
|
return ""
|
||||||
}
|
}
|
||||||
|
|
||||||
func (x *PsdState) GetOpenDoorCodes() []int32 {
|
func (x *PsdState) GetOpenAsdCodes() []int32 {
|
||||||
if x != nil {
|
if x != nil {
|
||||||
return x.OpenDoorCodes
|
return x.OpenAsdCodes
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (x *PsdState) GetClose() bool {
|
||||||
|
if x != nil {
|
||||||
|
return x.Close
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
// 钥匙状态
|
// 钥匙状态
|
||||||
type KeyState struct {
|
type KeyState struct {
|
||||||
state protoimpl.MessageState
|
state protoimpl.MessageState
|
||||||
@ -1996,289 +2112,304 @@ var file_device_state_proto_rawDesc = []byte{
|
|||||||
0x69, 0x6e, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01,
|
0x69, 0x6e, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01,
|
||||||
0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x74, 0x72, 0x61, 0x69,
|
0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x74, 0x72, 0x61, 0x69,
|
||||||
0x6e, 0x49, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x74, 0x72, 0x61, 0x69, 0x6e,
|
0x6e, 0x49, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x74, 0x72, 0x61, 0x69, 0x6e,
|
||||||
0x49, 0x64, 0x22, 0x62, 0x0a, 0x0c, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61,
|
0x49, 0x64, 0x22, 0x58, 0x0a, 0x0c, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61,
|
||||||
0x74, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02,
|
0x74, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02,
|
||||||
0x69, 0x64, 0x12, 0x26, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e,
|
0x69, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x6f, 0x63, 0x63, 0x75, 0x70, 0x69, 0x65, 0x64, 0x18, 0x03,
|
||||||
0x32, 0x12, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e,
|
0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x6f, 0x63, 0x63, 0x75, 0x70, 0x69, 0x65, 0x64, 0x12, 0x1c,
|
||||||
0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6f, 0x63,
|
0x0a, 0x09, 0x61, 0x78, 0x6c, 0x65, 0x46, 0x61, 0x75, 0x6c, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28,
|
||||||
0x63, 0x75, 0x70, 0x69, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x6f, 0x63,
|
0x08, 0x52, 0x09, 0x61, 0x78, 0x6c, 0x65, 0x46, 0x61, 0x75, 0x6c, 0x74, 0x22, 0xb3, 0x02, 0x0a,
|
||||||
0x63, 0x75, 0x70, 0x69, 0x65, 0x64, 0x22, 0x6f, 0x0a, 0x0b, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68,
|
0x0b, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0e, 0x0a, 0x02,
|
||||||
0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28,
|
0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06,
|
||||||
0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x18,
|
0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x6e, 0x6f,
|
||||||
0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x12, 0x18, 0x0a,
|
0x72, 0x6d, 0x61, 0x6c, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x76, 0x65, 0x72, 0x73, 0x65, 0x18,
|
||||||
0x07, 0x72, 0x65, 0x76, 0x65, 0x72, 0x73, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07,
|
0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x72, 0x65, 0x76, 0x65, 0x72, 0x73, 0x65, 0x12, 0x0e,
|
||||||
0x72, 0x65, 0x76, 0x65, 0x72, 0x73, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x64, 0x77, 0x18, 0x04, 0x20,
|
0x0a, 0x02, 0x64, 0x77, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x02, 0x64, 0x77, 0x12, 0x0e,
|
||||||
0x01, 0x28, 0x08, 0x52, 0x02, 0x64, 0x77, 0x12, 0x0e, 0x0a, 0x02, 0x66, 0x77, 0x18, 0x05, 0x20,
|
0x0a, 0x02, 0x66, 0x77, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x02, 0x66, 0x77, 0x12, 0x14,
|
||||||
0x01, 0x28, 0x08, 0x52, 0x02, 0x66, 0x77, 0x22, 0x4b, 0x0a, 0x0b, 0x53, 0x69, 0x67, 0x6e, 0x61,
|
0x0a, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x66,
|
||||||
0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01,
|
0x6f, 0x72, 0x63, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x73, 0x62, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08,
|
||||||
0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x2c, 0x0a, 0x06, 0x61, 0x73, 0x70, 0x65, 0x63, 0x74,
|
0x52, 0x02, 0x73, 0x62, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x77, 0x73, 0x62, 0x18, 0x08, 0x20, 0x01,
|
||||||
0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x53,
|
0x28, 0x08, 0x52, 0x04, 0x64, 0x77, 0x73, 0x62, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x77, 0x73, 0x62,
|
||||||
0x69, 0x67, 0x6e, 0x61, 0x6c, 0x2e, 0x41, 0x73, 0x70, 0x65, 0x63, 0x74, 0x52, 0x06, 0x61, 0x73,
|
0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x66, 0x77, 0x73, 0x62, 0x12, 0x0e, 0x0a, 0x02,
|
||||||
0x70, 0x65, 0x63, 0x74, 0x22, 0x4f, 0x0a, 0x06, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x22, 0x45,
|
0x6a, 0x63, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x02, 0x6a, 0x63, 0x12, 0x10, 0x0a, 0x03,
|
||||||
0x0a, 0x06, 0x41, 0x73, 0x70, 0x65, 0x63, 0x74, 0x12, 0x07, 0x0a, 0x03, 0x4e, 0x6f, 0x6e, 0x10,
|
0x71, 0x64, 0x63, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x71, 0x64, 0x63, 0x12, 0x10,
|
||||||
0x00, 0x12, 0x07, 0x0a, 0x03, 0x4f, 0x46, 0x46, 0x10, 0x01, 0x12, 0x05, 0x0a, 0x01, 0x4c, 0x10,
|
0x0a, 0x03, 0x71, 0x66, 0x63, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x71, 0x66, 0x63,
|
||||||
0x02, 0x12, 0x05, 0x0a, 0x01, 0x48, 0x10, 0x03, 0x12, 0x05, 0x0a, 0x01, 0x55, 0x10, 0x04, 0x12,
|
0x12, 0x10, 0x0a, 0x03, 0x71, 0x79, 0x63, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x71,
|
||||||
0x06, 0x0a, 0x02, 0x48, 0x55, 0x10, 0x05, 0x12, 0x05, 0x0a, 0x01, 0x42, 0x10, 0x06, 0x12, 0x05,
|
0x79, 0x63, 0x12, 0x0e, 0x0a, 0x02, 0x64, 0x63, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x08, 0x52, 0x02,
|
||||||
0x0a, 0x01, 0x41, 0x10, 0x07, 0x22, 0x1f, 0x0a, 0x0d, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72,
|
0x64, 0x63, 0x12, 0x0e, 0x0a, 0x02, 0x66, 0x63, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x08, 0x52, 0x02,
|
||||||
0x6d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01,
|
0x66, 0x63, 0x12, 0x0e, 0x0a, 0x02, 0x79, 0x63, 0x18, 0x10, 0x20, 0x01, 0x28, 0x08, 0x52, 0x02,
|
||||||
0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x1e, 0x0a, 0x0c, 0x53, 0x74, 0x61, 0x74, 0x69, 0x6f,
|
0x79, 0x63, 0x22, 0x4b, 0x0a, 0x0b, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74,
|
||||||
0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01,
|
0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69,
|
||||||
0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x87, 0x04, 0x0a, 0x0a, 0x54, 0x72, 0x61, 0x69, 0x6e,
|
0x64, 0x12, 0x2c, 0x0a, 0x06, 0x61, 0x73, 0x70, 0x65, 0x63, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28,
|
||||||
0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28,
|
0x0e, 0x32, 0x14, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c,
|
||||||
0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x75, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28,
|
0x2e, 0x41, 0x73, 0x70, 0x65, 0x63, 0x74, 0x52, 0x06, 0x61, 0x73, 0x70, 0x65, 0x63, 0x74, 0x22,
|
||||||
0x08, 0x52, 0x02, 0x75, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x70, 0x65, 0x65, 0x64, 0x18, 0x03,
|
0x4f, 0x0a, 0x06, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x22, 0x45, 0x0a, 0x06, 0x41, 0x73, 0x70,
|
||||||
0x20, 0x01, 0x28, 0x02, 0x52, 0x05, 0x73, 0x70, 0x65, 0x65, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x74,
|
0x65, 0x63, 0x74, 0x12, 0x07, 0x0a, 0x03, 0x4e, 0x6f, 0x6e, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03,
|
||||||
0x72, 0x61, 0x69, 0x6e, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03,
|
0x4f, 0x46, 0x46, 0x10, 0x01, 0x12, 0x05, 0x0a, 0x01, 0x4c, 0x10, 0x02, 0x12, 0x05, 0x0a, 0x01,
|
||||||
0x52, 0x0b, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x12, 0x12, 0x0a,
|
0x48, 0x10, 0x03, 0x12, 0x05, 0x0a, 0x01, 0x55, 0x10, 0x04, 0x12, 0x06, 0x0a, 0x02, 0x48, 0x55,
|
||||||
0x04, 0x73, 0x68, 0x6f, 0x77, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x73, 0x68, 0x6f,
|
0x10, 0x05, 0x12, 0x05, 0x0a, 0x01, 0x42, 0x10, 0x06, 0x12, 0x05, 0x0a, 0x01, 0x41, 0x10, 0x07,
|
||||||
0x77, 0x12, 0x22, 0x0a, 0x0c, 0x68, 0x65, 0x61, 0x64, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49,
|
0x22, 0x1f, 0x0a, 0x0d, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x53, 0x74, 0x61, 0x74,
|
||||||
0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x68, 0x65, 0x61, 0x64, 0x44, 0x65, 0x76,
|
0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69,
|
||||||
0x69, 0x63, 0x65, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x68, 0x65, 0x61, 0x64, 0x4f, 0x66, 0x66,
|
0x64, 0x22, 0x1e, 0x0a, 0x0c, 0x53, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74,
|
||||||
0x73, 0x65, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x68, 0x65, 0x61, 0x64, 0x4f,
|
0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69,
|
||||||
0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50,
|
0x64, 0x22, 0xad, 0x04, 0x0a, 0x0a, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65,
|
||||||
0x6f, 0x72, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x64, 0x65, 0x76, 0x69, 0x63,
|
0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64,
|
||||||
0x65, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x54, 0x6f,
|
0x12, 0x0e, 0x0a, 0x02, 0x75, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x02, 0x75, 0x70,
|
||||||
0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x54, 0x6f, 0x12,
|
0x12, 0x14, 0x0a, 0x05, 0x73, 0x70, 0x65, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x02, 0x52,
|
||||||
0x22, 0x0a, 0x0c, 0x72, 0x75, 0x6e, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18,
|
0x05, 0x73, 0x70, 0x65, 0x65, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x4c,
|
||||||
0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x72, 0x75, 0x6e, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74,
|
0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x74, 0x72, 0x61,
|
||||||
0x69, 0x6f, 0x6e, 0x12, 0x24, 0x0a, 0x0d, 0x68, 0x65, 0x61, 0x64, 0x44, 0x69, 0x72, 0x65, 0x63,
|
0x69, 0x6e, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x68, 0x6f, 0x77,
|
||||||
0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x68, 0x65, 0x61, 0x64,
|
0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x73, 0x68, 0x6f, 0x77, 0x12, 0x22, 0x0a, 0x0c,
|
||||||
0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3c, 0x0a, 0x0c, 0x64, 0x79, 0x6e,
|
0x68, 0x65, 0x61, 0x64, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x18, 0x06, 0x20, 0x01,
|
||||||
0x61, 0x6d, 0x69, 0x63, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32,
|
0x28, 0x09, 0x52, 0x0c, 0x68, 0x65, 0x61, 0x64, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64,
|
||||||
0x18, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x44, 0x79, 0x6e,
|
0x12, 0x1e, 0x0a, 0x0a, 0x68, 0x65, 0x61, 0x64, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x07,
|
||||||
0x61, 0x6d, 0x69, 0x63, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x0c, 0x64, 0x79, 0x6e, 0x61, 0x6d,
|
0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x68, 0x65, 0x61, 0x64, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74,
|
||||||
0x69, 0x63, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x33, 0x0a, 0x09, 0x76, 0x6f, 0x62, 0x63, 0x53,
|
0x12, 0x1e, 0x0a, 0x0a, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x18, 0x08,
|
||||||
0x74, 0x61, 0x74, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x73, 0x74, 0x61,
|
0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x6f, 0x72, 0x74,
|
||||||
0x74, 0x65, 0x2e, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x56, 0x6f, 0x62, 0x63, 0x53, 0x74, 0x61, 0x74,
|
0x12, 0x18, 0x0a, 0x07, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x54, 0x6f, 0x18, 0x09, 0x20, 0x01, 0x28,
|
||||||
0x65, 0x52, 0x09, 0x76, 0x6f, 0x62, 0x63, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x26, 0x0a, 0x0e,
|
0x08, 0x52, 0x07, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x54, 0x6f, 0x12, 0x22, 0x0a, 0x0c, 0x72, 0x75,
|
||||||
0x74, 0x72, 0x61, 0x69, 0x6e, 0x4b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x18, 0x0e,
|
0x6e, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08,
|
||||||
0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x4b, 0x69, 0x6c, 0x6f, 0x6d,
|
0x52, 0x0c, 0x72, 0x75, 0x6e, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x24,
|
||||||
0x65, 0x74, 0x65, 0x72, 0x12, 0x2a, 0x0a, 0x10, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x44,
|
0x0a, 0x0d, 0x68, 0x65, 0x61, 0x64, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18,
|
||||||
0x65, 0x6c, 0x61, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10,
|
0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x68, 0x65, 0x61, 0x64, 0x44, 0x69, 0x72, 0x65, 0x63,
|
||||||
0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x54, 0x69, 0x6d, 0x65,
|
0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3c, 0x0a, 0x0c, 0x64, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x53,
|
||||||
0x22, 0xcd, 0x06, 0x0a, 0x11, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69,
|
0x74, 0x61, 0x74, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x73, 0x74, 0x61,
|
||||||
0x63, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x68, 0x65, 0x61, 0x72, 0x74, 0x62,
|
0x74, 0x65, 0x2e, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x53,
|
||||||
0x65, 0x61, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x68, 0x65, 0x61, 0x72, 0x74,
|
0x74, 0x61, 0x74, 0x65, 0x52, 0x0c, 0x64, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x53, 0x74, 0x61,
|
||||||
0x62, 0x65, 0x61, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x68, 0x65, 0x61, 0x64, 0x4c, 0x69, 0x6e, 0x6b,
|
0x74, 0x65, 0x12, 0x33, 0x0a, 0x09, 0x76, 0x6f, 0x62, 0x63, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18,
|
||||||
0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x68, 0x65, 0x61, 0x64, 0x4c, 0x69,
|
0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x54, 0x72,
|
||||||
0x6e, 0x6b, 0x49, 0x64, 0x12, 0x26, 0x0a, 0x0e, 0x68, 0x65, 0x61, 0x64, 0x4c, 0x69, 0x6e, 0x6b,
|
0x61, 0x69, 0x6e, 0x56, 0x6f, 0x62, 0x63, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x09, 0x76, 0x6f,
|
||||||
0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x68, 0x65,
|
0x62, 0x63, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x74, 0x72, 0x61, 0x69, 0x6e,
|
||||||
0x61, 0x64, 0x4c, 0x69, 0x6e, 0x6b, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x1e, 0x0a, 0x0a,
|
0x4b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x03, 0x52,
|
||||||
0x74, 0x61, 0x69, 0x6c, 0x4c, 0x69, 0x6e, 0x6b, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09,
|
0x0e, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x4b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x12,
|
||||||
0x52, 0x0a, 0x74, 0x61, 0x69, 0x6c, 0x4c, 0x69, 0x6e, 0x6b, 0x49, 0x64, 0x12, 0x26, 0x0a, 0x0e,
|
0x2a, 0x0a, 0x10, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x54,
|
||||||
0x74, 0x61, 0x69, 0x6c, 0x4c, 0x69, 0x6e, 0x6b, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x05,
|
0x69, 0x6d, 0x65, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x63, 0x6f, 0x6e, 0x74, 0x72,
|
||||||
0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x74, 0x61, 0x69, 0x6c, 0x4c, 0x69, 0x6e, 0x6b, 0x4f, 0x66,
|
0x6f, 0x6c, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x68,
|
||||||
0x66, 0x73, 0x65, 0x74, 0x12, 0x2c, 0x0a, 0x11, 0x6f, 0x63, 0x63, 0x75, 0x70, 0x69, 0x65, 0x64,
|
0x65, 0x61, 0x64, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x55, 0x49, 0x64, 0x18, 0x10, 0x20, 0x01,
|
||||||
0x4c, 0x69, 0x6e, 0x6b, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52,
|
0x28, 0x09, 0x52, 0x0d, 0x68, 0x65, 0x61, 0x64, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x55, 0x49,
|
||||||
0x11, 0x6f, 0x63, 0x63, 0x75, 0x70, 0x69, 0x65, 0x64, 0x4c, 0x69, 0x6e, 0x6b, 0x49, 0x6e, 0x64,
|
0x64, 0x22, 0xcd, 0x06, 0x0a, 0x11, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x44, 0x79, 0x6e, 0x61, 0x6d,
|
||||||
0x65, 0x78, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x6c, 0x6f, 0x70, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28,
|
0x69, 0x63, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x68, 0x65, 0x61, 0x72, 0x74,
|
||||||
0x05, 0x52, 0x05, 0x73, 0x6c, 0x6f, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x75, 0x70, 0x73, 0x6c,
|
0x62, 0x65, 0x61, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x68, 0x65, 0x61, 0x72,
|
||||||
0x6f, 0x70, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x75, 0x70, 0x73, 0x6c, 0x6f,
|
0x74, 0x62, 0x65, 0x61, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x68, 0x65, 0x61, 0x64, 0x4c, 0x69, 0x6e,
|
||||||
0x70, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x55, 0x70, 0x18,
|
0x6b, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x68, 0x65, 0x61, 0x64, 0x4c,
|
||||||
0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x55, 0x70,
|
0x69, 0x6e, 0x6b, 0x49, 0x64, 0x12, 0x26, 0x0a, 0x0e, 0x68, 0x65, 0x61, 0x64, 0x4c, 0x69, 0x6e,
|
||||||
0x12, 0x32, 0x0a, 0x14, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x69, 0x73,
|
0x6b, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x68,
|
||||||
0x74, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x75, 0x6d, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x02, 0x52, 0x14,
|
0x65, 0x61, 0x64, 0x4c, 0x69, 0x6e, 0x6b, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x1e, 0x0a,
|
||||||
0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63,
|
0x0a, 0x74, 0x61, 0x69, 0x6c, 0x4c, 0x69, 0x6e, 0x6b, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28,
|
||||||
0x65, 0x53, 0x75, 0x6d, 0x12, 0x24, 0x0a, 0x0d, 0x61, 0x69, 0x72, 0x52, 0x65, 0x73, 0x69, 0x73,
|
0x09, 0x52, 0x0a, 0x74, 0x61, 0x69, 0x6c, 0x4c, 0x69, 0x6e, 0x6b, 0x49, 0x64, 0x12, 0x26, 0x0a,
|
||||||
0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0d, 0x61, 0x69, 0x72,
|
0x0e, 0x74, 0x61, 0x69, 0x6c, 0x4c, 0x69, 0x6e, 0x6b, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18,
|
||||||
0x52, 0x65, 0x73, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x72, 0x61,
|
0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x74, 0x61, 0x69, 0x6c, 0x4c, 0x69, 0x6e, 0x6b, 0x4f,
|
||||||
0x6d, 0x70, 0x52, 0x65, 0x73, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x0c, 0x20, 0x01,
|
0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x2c, 0x0a, 0x11, 0x6f, 0x63, 0x63, 0x75, 0x70, 0x69, 0x65,
|
||||||
0x28, 0x02, 0x52, 0x0e, 0x72, 0x61, 0x6d, 0x70, 0x52, 0x65, 0x73, 0x69, 0x73, 0x74, 0x61, 0x6e,
|
0x64, 0x4c, 0x69, 0x6e, 0x6b, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09,
|
||||||
0x63, 0x65, 0x12, 0x28, 0x0a, 0x0f, 0x63, 0x75, 0x72, 0x76, 0x65, 0x52, 0x65, 0x73, 0x69, 0x73,
|
0x52, 0x11, 0x6f, 0x63, 0x63, 0x75, 0x70, 0x69, 0x65, 0x64, 0x4c, 0x69, 0x6e, 0x6b, 0x49, 0x6e,
|
||||||
0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0f, 0x63, 0x75, 0x72,
|
0x64, 0x65, 0x78, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x6c, 0x6f, 0x70, 0x65, 0x18, 0x07, 0x20, 0x01,
|
||||||
0x76, 0x65, 0x52, 0x65, 0x73, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05,
|
0x28, 0x05, 0x52, 0x05, 0x73, 0x6c, 0x6f, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x75, 0x70, 0x73,
|
||||||
0x73, 0x70, 0x65, 0x65, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x73, 0x70, 0x65,
|
0x6c, 0x6f, 0x70, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x75, 0x70, 0x73, 0x6c,
|
||||||
0x65, 0x64, 0x12, 0x2a, 0x0a, 0x10, 0x68, 0x65, 0x61, 0x64, 0x53, 0x65, 0x6e, 0x73, 0x6f, 0x72,
|
0x6f, 0x70, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x55, 0x70,
|
||||||
0x53, 0x70, 0x65, 0x65, 0x64, 0x31, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x05, 0x52, 0x10, 0x68, 0x65,
|
0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x55,
|
||||||
0x61, 0x64, 0x53, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x53, 0x70, 0x65, 0x65, 0x64, 0x31, 0x12, 0x2a,
|
0x70, 0x12, 0x32, 0x0a, 0x14, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x69,
|
||||||
0x0a, 0x10, 0x68, 0x65, 0x61, 0x64, 0x53, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x53, 0x70, 0x65, 0x65,
|
0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x75, 0x6d, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x02, 0x52,
|
||||||
0x64, 0x32, 0x18, 0x10, 0x20, 0x01, 0x28, 0x05, 0x52, 0x10, 0x68, 0x65, 0x61, 0x64, 0x53, 0x65,
|
0x14, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x69, 0x73, 0x74, 0x61, 0x6e,
|
||||||
0x6e, 0x73, 0x6f, 0x72, 0x53, 0x70, 0x65, 0x65, 0x64, 0x32, 0x12, 0x2a, 0x0a, 0x10, 0x74, 0x61,
|
0x63, 0x65, 0x53, 0x75, 0x6d, 0x12, 0x24, 0x0a, 0x0d, 0x61, 0x69, 0x72, 0x52, 0x65, 0x73, 0x69,
|
||||||
0x69, 0x6c, 0x53, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x53, 0x70, 0x65, 0x65, 0x64, 0x31, 0x18, 0x11,
|
0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0d, 0x61, 0x69,
|
||||||
0x20, 0x01, 0x28, 0x05, 0x52, 0x10, 0x74, 0x61, 0x69, 0x6c, 0x53, 0x65, 0x6e, 0x73, 0x6f, 0x72,
|
0x72, 0x52, 0x65, 0x73, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x72,
|
||||||
0x53, 0x70, 0x65, 0x65, 0x64, 0x31, 0x12, 0x2a, 0x0a, 0x10, 0x74, 0x61, 0x69, 0x6c, 0x53, 0x65,
|
0x61, 0x6d, 0x70, 0x52, 0x65, 0x73, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x0c, 0x20,
|
||||||
0x6e, 0x73, 0x6f, 0x72, 0x53, 0x70, 0x65, 0x65, 0x64, 0x32, 0x18, 0x12, 0x20, 0x01, 0x28, 0x05,
|
0x01, 0x28, 0x02, 0x52, 0x0e, 0x72, 0x61, 0x6d, 0x70, 0x52, 0x65, 0x73, 0x69, 0x73, 0x74, 0x61,
|
||||||
0x52, 0x10, 0x74, 0x61, 0x69, 0x6c, 0x53, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x53, 0x70, 0x65, 0x65,
|
0x6e, 0x63, 0x65, 0x12, 0x28, 0x0a, 0x0f, 0x63, 0x75, 0x72, 0x76, 0x65, 0x52, 0x65, 0x73, 0x69,
|
||||||
0x64, 0x32, 0x12, 0x26, 0x0a, 0x0e, 0x68, 0x65, 0x61, 0x64, 0x52, 0x61, 0x64, 0x61, 0x72, 0x53,
|
0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0f, 0x63, 0x75,
|
||||||
0x70, 0x65, 0x65, 0x64, 0x18, 0x13, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x68, 0x65, 0x61, 0x64,
|
0x72, 0x76, 0x65, 0x52, 0x65, 0x73, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x14, 0x0a,
|
||||||
0x52, 0x61, 0x64, 0x61, 0x72, 0x53, 0x70, 0x65, 0x65, 0x64, 0x12, 0x26, 0x0a, 0x0e, 0x74, 0x61,
|
0x05, 0x73, 0x70, 0x65, 0x65, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x73, 0x70,
|
||||||
0x69, 0x6c, 0x52, 0x61, 0x64, 0x61, 0x72, 0x53, 0x70, 0x65, 0x65, 0x64, 0x18, 0x14, 0x20, 0x01,
|
0x65, 0x65, 0x64, 0x12, 0x2a, 0x0a, 0x10, 0x68, 0x65, 0x61, 0x64, 0x53, 0x65, 0x6e, 0x73, 0x6f,
|
||||||
0x28, 0x05, 0x52, 0x0e, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x61, 0x64, 0x61, 0x72, 0x53, 0x70, 0x65,
|
0x72, 0x53, 0x70, 0x65, 0x65, 0x64, 0x31, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x05, 0x52, 0x10, 0x68,
|
||||||
0x65, 0x64, 0x12, 0x28, 0x0a, 0x0f, 0x75, 0x64, 0x70, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x72, 0x75,
|
0x65, 0x61, 0x64, 0x53, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x53, 0x70, 0x65, 0x65, 0x64, 0x31, 0x12,
|
||||||
0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x15, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x75, 0x64, 0x70,
|
0x2a, 0x0a, 0x10, 0x68, 0x65, 0x61, 0x64, 0x53, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x53, 0x70, 0x65,
|
||||||
0x49, 0x6e, 0x74, 0x65, 0x72, 0x72, 0x75, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x22, 0x0a, 0x0c,
|
0x65, 0x64, 0x32, 0x18, 0x10, 0x20, 0x01, 0x28, 0x05, 0x52, 0x10, 0x68, 0x65, 0x61, 0x64, 0x53,
|
||||||
0x61, 0x63, 0x63, 0x65, 0x6c, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x16, 0x20, 0x01,
|
0x65, 0x6e, 0x73, 0x6f, 0x72, 0x53, 0x70, 0x65, 0x65, 0x64, 0x32, 0x12, 0x2a, 0x0a, 0x10, 0x74,
|
||||||
0x28, 0x02, 0x52, 0x0c, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e,
|
0x61, 0x69, 0x6c, 0x53, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x53, 0x70, 0x65, 0x65, 0x64, 0x31, 0x18,
|
||||||
0x22, 0x84, 0x08, 0x0a, 0x0e, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x56, 0x6f, 0x62, 0x63, 0x53, 0x74,
|
0x11, 0x20, 0x01, 0x28, 0x05, 0x52, 0x10, 0x74, 0x61, 0x69, 0x6c, 0x53, 0x65, 0x6e, 0x73, 0x6f,
|
||||||
0x61, 0x74, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x6c, 0x69, 0x66, 0x65, 0x53, 0x69, 0x67, 0x6e, 0x61,
|
0x72, 0x53, 0x70, 0x65, 0x65, 0x64, 0x31, 0x12, 0x2a, 0x0a, 0x10, 0x74, 0x61, 0x69, 0x6c, 0x53,
|
||||||
0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x6c, 0x69, 0x66, 0x65, 0x53, 0x69, 0x67,
|
0x65, 0x6e, 0x73, 0x6f, 0x72, 0x53, 0x70, 0x65, 0x65, 0x64, 0x32, 0x18, 0x12, 0x20, 0x01, 0x28,
|
||||||
0x6e, 0x61, 0x6c, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x63, 0x31, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65,
|
0x05, 0x52, 0x10, 0x74, 0x61, 0x69, 0x6c, 0x53, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x53, 0x70, 0x65,
|
||||||
0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x74, 0x63, 0x31, 0x41, 0x63, 0x74, 0x69, 0x76,
|
0x65, 0x64, 0x32, 0x12, 0x26, 0x0a, 0x0e, 0x68, 0x65, 0x61, 0x64, 0x52, 0x61, 0x64, 0x61, 0x72,
|
||||||
0x65, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x63, 0x32, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x18, 0x03,
|
0x53, 0x70, 0x65, 0x65, 0x64, 0x18, 0x13, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x68, 0x65, 0x61,
|
||||||
0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x74, 0x63, 0x32, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x12,
|
0x64, 0x52, 0x61, 0x64, 0x61, 0x72, 0x53, 0x70, 0x65, 0x65, 0x64, 0x12, 0x26, 0x0a, 0x0e, 0x74,
|
||||||
0x2a, 0x0a, 0x10, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x6f, 0x72, 0x77,
|
0x61, 0x69, 0x6c, 0x52, 0x61, 0x64, 0x61, 0x72, 0x53, 0x70, 0x65, 0x65, 0x64, 0x18, 0x14, 0x20,
|
||||||
0x61, 0x72, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x64, 0x69, 0x72, 0x65, 0x63,
|
0x01, 0x28, 0x05, 0x52, 0x0e, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x61, 0x64, 0x61, 0x72, 0x53, 0x70,
|
||||||
0x74, 0x69, 0x6f, 0x6e, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x12, 0x2c, 0x0a, 0x11, 0x64,
|
0x65, 0x65, 0x64, 0x12, 0x28, 0x0a, 0x0f, 0x75, 0x64, 0x70, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x72,
|
||||||
0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x61, 0x63, 0x6b, 0x77, 0x61, 0x72, 0x64,
|
0x75, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x15, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x75, 0x64,
|
||||||
0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f,
|
0x70, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x72, 0x75, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x22, 0x0a,
|
||||||
0x6e, 0x42, 0x61, 0x63, 0x6b, 0x77, 0x61, 0x72, 0x64, 0x12, 0x26, 0x0a, 0x0e, 0x74, 0x72, 0x61,
|
0x0c, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x16, 0x20,
|
||||||
0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28,
|
0x01, 0x28, 0x02, 0x52, 0x0c, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f,
|
||||||
0x08, 0x52, 0x0e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75,
|
0x6e, 0x22, 0x84, 0x08, 0x0a, 0x0e, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x56, 0x6f, 0x62, 0x63, 0x53,
|
||||||
0x73, 0x12, 0x24, 0x0a, 0x0d, 0x62, 0x72, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x61, 0x74,
|
0x74, 0x61, 0x74, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x6c, 0x69, 0x66, 0x65, 0x53, 0x69, 0x67, 0x6e,
|
||||||
0x75, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x62, 0x72, 0x61, 0x6b, 0x69, 0x6e,
|
0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x6c, 0x69, 0x66, 0x65, 0x53, 0x69,
|
||||||
0x67, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x36, 0x0a, 0x16, 0x65, 0x6d, 0x65, 0x72, 0x67,
|
0x67, 0x6e, 0x61, 0x6c, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x63, 0x31, 0x41, 0x63, 0x74, 0x69, 0x76,
|
||||||
0x65, 0x6e, 0x63, 0x79, 0x42, 0x72, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x61, 0x74, 0x75,
|
0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x74, 0x63, 0x31, 0x41, 0x63, 0x74, 0x69,
|
||||||
0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x16, 0x65, 0x6d, 0x65, 0x72, 0x67, 0x65, 0x6e,
|
0x76, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x63, 0x32, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x18,
|
||||||
0x63, 0x79, 0x42, 0x72, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12,
|
0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x74, 0x63, 0x32, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65,
|
||||||
0x26, 0x0a, 0x0e, 0x74, 0x75, 0x72, 0x6e, 0x62, 0x61, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75,
|
0x12, 0x2a, 0x0a, 0x10, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x6f, 0x72,
|
||||||
0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x74, 0x75, 0x72, 0x6e, 0x62, 0x61, 0x63,
|
0x77, 0x61, 0x72, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x64, 0x69, 0x72, 0x65,
|
||||||
0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x6a, 0x75, 0x6d, 0x70, 0x53,
|
0x63, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x12, 0x2c, 0x0a, 0x11,
|
||||||
0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x6a, 0x75, 0x6d,
|
0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x61, 0x63, 0x6b, 0x77, 0x61, 0x72,
|
||||||
0x70, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x74, 0x6f, 0x18, 0x0b,
|
0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69,
|
||||||
0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x74, 0x6f, 0x12, 0x10, 0x0a, 0x03, 0x66, 0x61, 0x6d,
|
0x6f, 0x6e, 0x42, 0x61, 0x63, 0x6b, 0x77, 0x61, 0x72, 0x64, 0x12, 0x26, 0x0a, 0x0e, 0x74, 0x72,
|
||||||
0x18, 0x0c, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x66, 0x61, 0x6d, 0x12, 0x10, 0x0a, 0x03, 0x63,
|
0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x06, 0x20, 0x01,
|
||||||
0x61, 0x6d, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x63, 0x61, 0x6d, 0x12, 0x34, 0x0a,
|
0x28, 0x08, 0x52, 0x0e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74,
|
||||||
0x15, 0x74, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x61, 0x66, 0x65, 0x74, 0x79, 0x43,
|
0x75, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x62, 0x72, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x61,
|
||||||
0x69, 0x72, 0x63, 0x75, 0x69, 0x74, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x08, 0x52, 0x15, 0x74, 0x72,
|
0x74, 0x75, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x62, 0x72, 0x61, 0x6b, 0x69,
|
||||||
0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x61, 0x66, 0x65, 0x74, 0x79, 0x43, 0x69, 0x72, 0x63,
|
0x6e, 0x67, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x36, 0x0a, 0x16, 0x65, 0x6d, 0x65, 0x72,
|
||||||
0x75, 0x69, 0x74, 0x12, 0x2e, 0x0a, 0x12, 0x70, 0x61, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x42, 0x72,
|
0x67, 0x65, 0x6e, 0x63, 0x79, 0x42, 0x72, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x61, 0x74,
|
||||||
0x61, 0x6b, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x08, 0x52,
|
0x75, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x16, 0x65, 0x6d, 0x65, 0x72, 0x67, 0x65,
|
||||||
0x12, 0x70, 0x61, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x42, 0x72, 0x61, 0x6b, 0x65, 0x53, 0x74, 0x61,
|
0x6e, 0x63, 0x79, 0x42, 0x72, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73,
|
||||||
0x74, 0x75, 0x73, 0x12, 0x30, 0x0a, 0x13, 0x6d, 0x61, 0x69, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x42,
|
0x12, 0x26, 0x0a, 0x0e, 0x74, 0x75, 0x72, 0x6e, 0x62, 0x61, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74,
|
||||||
0x72, 0x61, 0x6b, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x10, 0x20, 0x01, 0x28, 0x08,
|
0x75, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x74, 0x75, 0x72, 0x6e, 0x62, 0x61,
|
||||||
0x52, 0x13, 0x6d, 0x61, 0x69, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x42, 0x72, 0x61, 0x6b, 0x65, 0x53,
|
0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x6a, 0x75, 0x6d, 0x70,
|
||||||
0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x74, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f,
|
0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x6a, 0x75,
|
||||||
0x6e, 0x46, 0x6f, 0x72, 0x63, 0x65, 0x18, 0x11, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x74, 0x72,
|
0x6d, 0x70, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x74, 0x6f, 0x18,
|
||||||
0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x6f, 0x72, 0x63, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x62,
|
0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x74, 0x6f, 0x12, 0x10, 0x0a, 0x03, 0x66, 0x61,
|
||||||
0x72, 0x61, 0x6b, 0x65, 0x46, 0x6f, 0x72, 0x63, 0x65, 0x18, 0x12, 0x20, 0x01, 0x28, 0x03, 0x52,
|
0x6d, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x66, 0x61, 0x6d, 0x12, 0x10, 0x0a, 0x03,
|
||||||
0x0a, 0x62, 0x72, 0x61, 0x6b, 0x65, 0x46, 0x6f, 0x72, 0x63, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x74,
|
0x63, 0x61, 0x6d, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x63, 0x61, 0x6d, 0x12, 0x34,
|
||||||
0x72, 0x61, 0x69, 0x6e, 0x4c, 0x6f, 0x61, 0x64, 0x18, 0x13, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09,
|
0x0a, 0x15, 0x74, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x61, 0x66, 0x65, 0x74, 0x79,
|
||||||
0x74, 0x72, 0x61, 0x69, 0x6e, 0x4c, 0x6f, 0x61, 0x64, 0x12, 0x30, 0x0a, 0x13, 0x6c, 0x65, 0x66,
|
0x43, 0x69, 0x72, 0x63, 0x75, 0x69, 0x74, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x08, 0x52, 0x15, 0x74,
|
||||||
|
0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x61, 0x66, 0x65, 0x74, 0x79, 0x43, 0x69, 0x72,
|
||||||
|
0x63, 0x75, 0x69, 0x74, 0x12, 0x2e, 0x0a, 0x12, 0x70, 0x61, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x42,
|
||||||
|
0x72, 0x61, 0x6b, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x08,
|
||||||
|
0x52, 0x12, 0x70, 0x61, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x42, 0x72, 0x61, 0x6b, 0x65, 0x53, 0x74,
|
||||||
|
0x61, 0x74, 0x75, 0x73, 0x12, 0x30, 0x0a, 0x13, 0x6d, 0x61, 0x69, 0x6e, 0x74, 0x61, 0x69, 0x6e,
|
||||||
|
0x42, 0x72, 0x61, 0x6b, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x10, 0x20, 0x01, 0x28,
|
||||||
|
0x08, 0x52, 0x13, 0x6d, 0x61, 0x69, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x42, 0x72, 0x61, 0x6b, 0x65,
|
||||||
|
0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x74, 0x72, 0x61, 0x63, 0x74, 0x69,
|
||||||
|
0x6f, 0x6e, 0x46, 0x6f, 0x72, 0x63, 0x65, 0x18, 0x11, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x74,
|
||||||
|
0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x6f, 0x72, 0x63, 0x65, 0x12, 0x1e, 0x0a, 0x0a,
|
||||||
|
0x62, 0x72, 0x61, 0x6b, 0x65, 0x46, 0x6f, 0x72, 0x63, 0x65, 0x18, 0x12, 0x20, 0x01, 0x28, 0x03,
|
||||||
|
0x52, 0x0a, 0x62, 0x72, 0x61, 0x6b, 0x65, 0x46, 0x6f, 0x72, 0x63, 0x65, 0x12, 0x1c, 0x0a, 0x09,
|
||||||
|
0x74, 0x72, 0x61, 0x69, 0x6e, 0x4c, 0x6f, 0x61, 0x64, 0x18, 0x13, 0x20, 0x01, 0x28, 0x03, 0x52,
|
||||||
|
0x09, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x4c, 0x6f, 0x61, 0x64, 0x12, 0x30, 0x0a, 0x13, 0x6c, 0x65,
|
||||||
|
0x66, 0x74, 0x44, 0x6f, 0x6f, 0x72, 0x4f, 0x70, 0x65, 0x6e, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e,
|
||||||
|
0x64, 0x18, 0x14, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x6c, 0x65, 0x66, 0x74, 0x44, 0x6f, 0x6f,
|
||||||
|
0x72, 0x4f, 0x70, 0x65, 0x6e, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x32, 0x0a, 0x14,
|
||||||
|
0x72, 0x69, 0x67, 0x68, 0x74, 0x44, 0x6f, 0x6f, 0x72, 0x4f, 0x70, 0x65, 0x6e, 0x43, 0x6f, 0x6d,
|
||||||
|
0x6d, 0x61, 0x6e, 0x64, 0x18, 0x15, 0x20, 0x01, 0x28, 0x08, 0x52, 0x14, 0x72, 0x69, 0x67, 0x68,
|
||||||
0x74, 0x44, 0x6f, 0x6f, 0x72, 0x4f, 0x70, 0x65, 0x6e, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64,
|
0x74, 0x44, 0x6f, 0x6f, 0x72, 0x4f, 0x70, 0x65, 0x6e, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64,
|
||||||
0x18, 0x14, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x6c, 0x65, 0x66, 0x74, 0x44, 0x6f, 0x6f, 0x72,
|
0x12, 0x32, 0x0a, 0x14, 0x6c, 0x65, 0x66, 0x74, 0x44, 0x6f, 0x6f, 0x72, 0x43, 0x6c, 0x6f, 0x73,
|
||||||
0x4f, 0x70, 0x65, 0x6e, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x32, 0x0a, 0x14, 0x72,
|
0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x16, 0x20, 0x01, 0x28, 0x08, 0x52, 0x14,
|
||||||
0x69, 0x67, 0x68, 0x74, 0x44, 0x6f, 0x6f, 0x72, 0x4f, 0x70, 0x65, 0x6e, 0x43, 0x6f, 0x6d, 0x6d,
|
0x6c, 0x65, 0x66, 0x74, 0x44, 0x6f, 0x6f, 0x72, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x43, 0x6f, 0x6d,
|
||||||
0x61, 0x6e, 0x64, 0x18, 0x15, 0x20, 0x01, 0x28, 0x08, 0x52, 0x14, 0x72, 0x69, 0x67, 0x68, 0x74,
|
0x6d, 0x61, 0x6e, 0x64, 0x12, 0x34, 0x0a, 0x15, 0x72, 0x69, 0x67, 0x68, 0x74, 0x44, 0x6f, 0x6f,
|
||||||
0x44, 0x6f, 0x6f, 0x72, 0x4f, 0x70, 0x65, 0x6e, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12,
|
0x72, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x17, 0x20,
|
||||||
0x32, 0x0a, 0x14, 0x6c, 0x65, 0x66, 0x74, 0x44, 0x6f, 0x6f, 0x72, 0x43, 0x6c, 0x6f, 0x73, 0x65,
|
0x01, 0x28, 0x08, 0x52, 0x15, 0x72, 0x69, 0x67, 0x68, 0x74, 0x44, 0x6f, 0x6f, 0x72, 0x43, 0x6c,
|
||||||
0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x16, 0x20, 0x01, 0x28, 0x08, 0x52, 0x14, 0x6c,
|
0x6f, 0x73, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x22, 0x0a, 0x0c, 0x61, 0x6c,
|
||||||
0x65, 0x66, 0x74, 0x44, 0x6f, 0x6f, 0x72, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x43, 0x6f, 0x6d, 0x6d,
|
0x6c, 0x44, 0x6f, 0x6f, 0x72, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x18, 0x18, 0x20, 0x01, 0x28, 0x08,
|
||||||
0x61, 0x6e, 0x64, 0x12, 0x34, 0x0a, 0x15, 0x72, 0x69, 0x67, 0x68, 0x74, 0x44, 0x6f, 0x6f, 0x72,
|
0x52, 0x0c, 0x61, 0x6c, 0x6c, 0x44, 0x6f, 0x6f, 0x72, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x12, 0x28,
|
||||||
0x43, 0x6c, 0x6f, 0x73, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x17, 0x20, 0x01,
|
0x0a, 0x0f, 0x75, 0x64, 0x70, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x72, 0x75, 0x70, 0x74, 0x69, 0x6f,
|
||||||
0x28, 0x08, 0x52, 0x15, 0x72, 0x69, 0x67, 0x68, 0x74, 0x44, 0x6f, 0x6f, 0x72, 0x43, 0x6c, 0x6f,
|
0x6e, 0x18, 0x19, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x75, 0x64, 0x70, 0x49, 0x6e, 0x74, 0x65,
|
||||||
0x73, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x22, 0x0a, 0x0c, 0x61, 0x6c, 0x6c,
|
0x72, 0x72, 0x75, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1e, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61,
|
||||||
0x44, 0x6f, 0x6f, 0x72, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x18, 0x18, 0x20, 0x01, 0x28, 0x08, 0x52,
|
0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x75, 0x70,
|
||||||
0x0c, 0x61, 0x6c, 0x6c, 0x44, 0x6f, 0x6f, 0x72, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x12, 0x28, 0x0a,
|
0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x2c, 0x0a, 0x0a, 0x52, 0x65, 0x70, 0x6c,
|
||||||
0x0f, 0x75, 0x64, 0x70, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x72, 0x75, 0x70, 0x74, 0x69, 0x6f, 0x6e,
|
0x79, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01,
|
||||||
0x18, 0x19, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x75, 0x64, 0x70, 0x49, 0x6e, 0x74, 0x65, 0x72,
|
0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x78, 0x68, 0x18, 0x02, 0x20, 0x01,
|
||||||
0x72, 0x75, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1e, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74,
|
0x28, 0x08, 0x52, 0x02, 0x78, 0x68, 0x22, 0x49, 0x0a, 0x0b, 0x42, 0x75, 0x74, 0x74, 0x6f, 0x6e,
|
||||||
0x65, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x75, 0x70, 0x64,
|
|
||||||
0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x2c, 0x0a, 0x0a, 0x52, 0x65, 0x70, 0x6c, 0x79,
|
|
||||||
0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28,
|
0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28,
|
||||||
0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x78, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28,
|
0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x6f, 0x77, 0x6e, 0x18, 0x02, 0x20,
|
||||||
0x08, 0x52, 0x02, 0x78, 0x68, 0x22, 0x49, 0x0a, 0x0b, 0x42, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x53,
|
0x01, 0x28, 0x08, 0x52, 0x04, 0x64, 0x6f, 0x77, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x63, 0x74,
|
||||||
0x74, 0x61, 0x74, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
|
0x69, 0x76, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x76,
|
||||||
0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x6f, 0x77, 0x6e, 0x18, 0x02, 0x20, 0x01,
|
0x65, 0x22, 0x34, 0x0a, 0x0a, 0x41, 0x6c, 0x61, 0x72, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12,
|
||||||
0x28, 0x08, 0x52, 0x04, 0x64, 0x6f, 0x77, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69,
|
0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12,
|
||||||
0x76, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65,
|
0x16, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52,
|
||||||
0x22, 0x34, 0x0a, 0x0a, 0x41, 0x6c, 0x61, 0x72, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0e,
|
0x06, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x22, 0x34, 0x0a, 0x0a, 0x4c, 0x69, 0x67, 0x68, 0x74,
|
||||||
0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x16,
|
0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28,
|
||||||
0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06,
|
0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x18,
|
||||||
0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x22, 0x34, 0x0a, 0x0a, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x53,
|
0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x22, 0x54, 0x0a,
|
||||||
0x74, 0x61, 0x74, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
|
0x08, 0x50, 0x73, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18,
|
||||||
0x52, 0x02, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x18, 0x02,
|
0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x22, 0x0a, 0x0c, 0x6f, 0x70, 0x65,
|
||||||
0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x22, 0x40, 0x0a, 0x08,
|
0x6e, 0x41, 0x73, 0x64, 0x43, 0x6f, 0x64, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x05, 0x52,
|
||||||
0x50, 0x73, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01,
|
0x0c, 0x6f, 0x70, 0x65, 0x6e, 0x41, 0x73, 0x64, 0x43, 0x6f, 0x64, 0x65, 0x73, 0x12, 0x14, 0x0a,
|
||||||
0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x24, 0x0a, 0x0d, 0x6f, 0x70, 0x65, 0x6e,
|
0x05, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x63, 0x6c,
|
||||||
0x44, 0x6f, 0x6f, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x05, 0x52,
|
0x6f, 0x73, 0x65, 0x22, 0x2e, 0x0a, 0x08, 0x4b, 0x65, 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12,
|
||||||
0x0d, 0x6f, 0x70, 0x65, 0x6e, 0x44, 0x6f, 0x6f, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x73, 0x22, 0x2e,
|
0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12,
|
||||||
0x0a, 0x08, 0x4b, 0x65, 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64,
|
0x12, 0x0a, 0x04, 0x67, 0x65, 0x61, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x67,
|
||||||
0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x67, 0x65,
|
0x65, 0x61, 0x72, 0x22, 0x9e, 0x02, 0x0a, 0x0f, 0x56, 0x61, 0x72, 0x69, 0x61, 0x74, 0x69, 0x6f,
|
||||||
0x61, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x67, 0x65, 0x61, 0x72, 0x22, 0x9e,
|
0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x35, 0x0a, 0x0c, 0x75, 0x70, 0x64, 0x61, 0x74,
|
||||||
0x02, 0x0a, 0x0f, 0x56, 0x61, 0x72, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74,
|
0x65, 0x64, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e,
|
||||||
0x75, 0x73, 0x12, 0x35, 0x0a, 0x0c, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x54, 0x72, 0x61,
|
0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65,
|
||||||
0x69, 0x6e, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65,
|
0x52, 0x0c, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x12, 0x26,
|
||||||
0x2e, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x0c, 0x75, 0x70, 0x64,
|
0x0a, 0x0e, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x49, 0x64,
|
||||||
0x61, 0x74, 0x65, 0x64, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x12, 0x26, 0x0a, 0x0e, 0x72, 0x65, 0x6d,
|
0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x54,
|
||||||
0x6f, 0x76, 0x65, 0x64, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28,
|
0x72, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x38, 0x0a, 0x0d, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65,
|
||||||
0x09, 0x52, 0x0e, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x49,
|
0x64, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e,
|
||||||
0x64, 0x12, 0x38, 0x0a, 0x0d, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x53, 0x77, 0x69, 0x74,
|
0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x53, 0x74, 0x61, 0x74,
|
||||||
0x63, 0x68, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65,
|
0x65, 0x52, 0x0d, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68,
|
||||||
0x2e, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x0d, 0x75, 0x70,
|
0x12, 0x3b, 0x0a, 0x0e, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x53, 0x65, 0x63, 0x74, 0x69,
|
||||||
0x64, 0x61, 0x74, 0x65, 0x64, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x12, 0x3b, 0x0a, 0x0e, 0x75,
|
0x6f, 0x6e, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65,
|
||||||
0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20,
|
0x2e, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x0e, 0x75,
|
||||||
0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x53, 0x65, 0x63, 0x74,
|
0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x35, 0x0a,
|
||||||
0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x0e, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65,
|
0x0c, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x18, 0x05, 0x20,
|
||||||
0x64, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x35, 0x0a, 0x0c, 0x75, 0x70, 0x64, 0x61,
|
0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x52, 0x65, 0x70, 0x6c,
|
||||||
0x74, 0x65, 0x64, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11,
|
0x79, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x0c, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x52,
|
||||||
0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x53, 0x74, 0x61, 0x74,
|
0x65, 0x70, 0x6c, 0x79, 0x22, 0x93, 0x04, 0x0a, 0x10, 0x41, 0x6c, 0x6c, 0x44, 0x65, 0x76, 0x69,
|
||||||
0x65, 0x52, 0x0c, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22,
|
0x63, 0x65, 0x73, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x31, 0x0a, 0x0a, 0x74, 0x72, 0x61,
|
||||||
0x93, 0x04, 0x0a, 0x10, 0x41, 0x6c, 0x6c, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x53, 0x74,
|
0x69, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e,
|
||||||
0x61, 0x74, 0x75, 0x73, 0x12, 0x31, 0x0a, 0x0a, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x53, 0x74, 0x61,
|
0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65,
|
||||||
0x74, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65,
|
0x52, 0x0a, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x34, 0x0a, 0x0b,
|
||||||
0x2e, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x0a, 0x74, 0x72, 0x61,
|
0x73, 0x77, 0x69, 0x74, 0x63, 0x68, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x03, 0x28,
|
||||||
0x69, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x34, 0x0a, 0x0b, 0x73, 0x77, 0x69, 0x74, 0x63,
|
0x0b, 0x32, 0x12, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68,
|
||||||
0x68, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x73,
|
0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x0b, 0x73, 0x77, 0x69, 0x74, 0x63, 0x68, 0x53, 0x74, 0x61,
|
||||||
0x74, 0x61, 0x74, 0x65, 0x2e, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x53, 0x74, 0x61, 0x74, 0x65,
|
0x74, 0x65, 0x12, 0x37, 0x0a, 0x0c, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61,
|
||||||
0x52, 0x0b, 0x73, 0x77, 0x69, 0x74, 0x63, 0x68, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x37, 0x0a,
|
0x74, 0x65, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65,
|
||||||
0x0c, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20,
|
0x2e, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x0c, 0x73,
|
||||||
0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x53, 0x65, 0x63, 0x74,
|
0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x31, 0x0a, 0x0a, 0x72,
|
||||||
0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x0c, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f,
|
0x65, 0x70, 0x6c, 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32,
|
||||||
0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x31, 0x0a, 0x0a, 0x72, 0x65, 0x70, 0x6c, 0x79, 0x53,
|
0x11, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x53, 0x74, 0x61,
|
||||||
0x74, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x73, 0x74, 0x61,
|
0x74, 0x65, 0x52, 0x0a, 0x72, 0x65, 0x70, 0x6c, 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x34,
|
||||||
0x74, 0x65, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x0a, 0x72,
|
0x0a, 0x0b, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x05, 0x20,
|
||||||
0x65, 0x70, 0x6c, 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x34, 0x0a, 0x0b, 0x73, 0x69, 0x67,
|
0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x53, 0x69, 0x67, 0x6e,
|
||||||
0x6e, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12,
|
0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x0b, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x53,
|
||||||
0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x53, 0x74, 0x61,
|
0x74, 0x61, 0x74, 0x65, 0x12, 0x34, 0x0a, 0x0b, 0x62, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x53, 0x74,
|
||||||
0x74, 0x65, 0x52, 0x0b, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12,
|
0x61, 0x74, 0x65, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x73, 0x74, 0x61, 0x74,
|
||||||
0x34, 0x0a, 0x0b, 0x62, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x06,
|
0x65, 0x2e, 0x42, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x0b, 0x62,
|
||||||
0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x42, 0x75, 0x74,
|
0x75, 0x74, 0x74, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x31, 0x0a, 0x0a, 0x41, 0x6c,
|
||||||
0x74, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x0b, 0x62, 0x75, 0x74, 0x74, 0x6f, 0x6e,
|
0x61, 0x72, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11,
|
||||||
0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x31, 0x0a, 0x0a, 0x41, 0x6c, 0x61, 0x72, 0x6d, 0x53, 0x74,
|
0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x41, 0x6c, 0x61, 0x72, 0x6d, 0x53, 0x74, 0x61, 0x74,
|
||||||
0x61, 0x74, 0x65, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x73, 0x74, 0x61, 0x74,
|
0x65, 0x52, 0x0a, 0x41, 0x6c, 0x61, 0x72, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x31, 0x0a,
|
||||||
0x65, 0x2e, 0x41, 0x6c, 0x61, 0x72, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x0a, 0x41, 0x6c,
|
0x0a, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x08, 0x20, 0x03, 0x28,
|
||||||
0x61, 0x72, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x31, 0x0a, 0x0a, 0x4c, 0x69, 0x67, 0x68,
|
0x0b, 0x32, 0x11, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x53,
|
||||||
0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x73,
|
0x74, 0x61, 0x74, 0x65, 0x52, 0x0a, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65,
|
||||||
0x74, 0x61, 0x74, 0x65, 0x2e, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52,
|
0x12, 0x2b, 0x0a, 0x08, 0x70, 0x73, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x09, 0x20, 0x03,
|
||||||
0x0a, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x2b, 0x0a, 0x08, 0x70,
|
0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x50, 0x73, 0x64, 0x53, 0x74,
|
||||||
0x73, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e,
|
0x61, 0x74, 0x65, 0x52, 0x08, 0x70, 0x73, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x2b, 0x0a,
|
||||||
0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x50, 0x73, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x08,
|
0x08, 0x4b, 0x65, 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32,
|
||||||
0x70, 0x73, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x2b, 0x0a, 0x08, 0x4b, 0x65, 0x79, 0x53,
|
0x0f, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x4b, 0x65, 0x79, 0x53, 0x74, 0x61, 0x74, 0x65,
|
||||||
0x74, 0x61, 0x74, 0x65, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x73, 0x74, 0x61,
|
0x52, 0x08, 0x4b, 0x65, 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, 0x22, 0x94, 0x01, 0x0a, 0x13, 0x50,
|
||||||
0x74, 0x65, 0x2e, 0x4b, 0x65, 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x08, 0x4b, 0x65, 0x79,
|
0x75, 0x73, 0x68, 0x65, 0x64, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x53, 0x74, 0x61, 0x74,
|
||||||
0x53, 0x74, 0x61, 0x74, 0x65, 0x22, 0x94, 0x01, 0x0a, 0x13, 0x50, 0x75, 0x73, 0x68, 0x65, 0x64,
|
0x75, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x6c, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52,
|
||||||
0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x10, 0x0a,
|
0x03, 0x61, 0x6c, 0x6c, 0x12, 0x34, 0x0a, 0x09, 0x76, 0x61, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75,
|
||||||
0x03, 0x61, 0x6c, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x6c, 0x6c, 0x12,
|
0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e,
|
||||||
0x34, 0x0a, 0x09, 0x76, 0x61, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01,
|
0x56, 0x61, 0x72, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52,
|
||||||
0x28, 0x0b, 0x32, 0x16, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x56, 0x61, 0x72, 0x69, 0x61,
|
0x09, 0x76, 0x61, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x35, 0x0a, 0x09, 0x61, 0x6c,
|
||||||
0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x09, 0x76, 0x61, 0x72, 0x53,
|
0x6c, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e,
|
||||||
0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x35, 0x0a, 0x09, 0x61, 0x6c, 0x6c, 0x53, 0x74, 0x61, 0x74,
|
0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x41, 0x6c, 0x6c, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73,
|
||||||
0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65,
|
0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x09, 0x61, 0x6c, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x75,
|
||||||
0x2e, 0x41, 0x6c, 0x6c, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x53, 0x74, 0x61, 0x74, 0x75,
|
0x73, 0x22, 0xd8, 0x01, 0x0a, 0x10, 0x53, 0x69, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e,
|
||||||
0x73, 0x52, 0x09, 0x61, 0x6c, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0xd8, 0x01, 0x0a,
|
0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x73, 0x69, 0x6d, 0x75, 0x6c, 0x61,
|
||||||
0x10, 0x53, 0x69, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75,
|
0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x69,
|
||||||
0x73, 0x12, 0x22, 0x0a, 0x0c, 0x73, 0x69, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49,
|
0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x3d, 0x0a, 0x05, 0x73, 0x74,
|
||||||
0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x69, 0x6d, 0x75, 0x6c, 0x61, 0x74,
|
0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x27, 0x2e, 0x73, 0x74, 0x61, 0x74,
|
||||||
0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x3d, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02,
|
0x65, 0x2e, 0x53, 0x69, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74,
|
||||||
0x20, 0x01, 0x28, 0x0e, 0x32, 0x27, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x53, 0x69, 0x6d,
|
0x75, 0x73, 0x2e, 0x53, 0x69, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61,
|
||||||
0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2e, 0x53, 0x69,
|
0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73,
|
||||||
0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73,
|
0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b,
|
||||||
0x74, 0x61, 0x74, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74,
|
0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x3f, 0x0a, 0x0f, 0x53,
|
||||||
0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72,
|
0x69, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x09,
|
||||||
0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x3f, 0x0a, 0x0f, 0x53, 0x69, 0x6d, 0x75, 0x6c, 0x61,
|
0x0a, 0x05, 0x50, 0x41, 0x55, 0x53, 0x45, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x53, 0x54, 0x41,
|
||||||
0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x09, 0x0a, 0x05, 0x50, 0x41, 0x55,
|
0x52, 0x54, 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x02, 0x12,
|
||||||
0x53, 0x45, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x53, 0x54, 0x41, 0x52, 0x54, 0x10, 0x01, 0x12,
|
0x0b, 0x0a, 0x07, 0x44, 0x45, 0x53, 0x54, 0x52, 0x4f, 0x59, 0x10, 0x03, 0x2a, 0x37, 0x0a, 0x0b,
|
||||||
0x09, 0x0a, 0x05, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x44, 0x45,
|
0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x07, 0x0a, 0x03, 0x41,
|
||||||
0x53, 0x54, 0x52, 0x4f, 0x59, 0x10, 0x03, 0x2a, 0x37, 0x0a, 0x0b, 0x53, 0x65, 0x63, 0x74, 0x69,
|
0x6e, 0x79, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x41, 0x78, 0x6c, 0x65, 0x10, 0x01, 0x12, 0x09,
|
||||||
0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x07, 0x0a, 0x03, 0x41, 0x6e, 0x79, 0x10, 0x00, 0x12,
|
0x0a, 0x05, 0x4c, 0x6f, 0x67, 0x69, 0x63, 0x10, 0x02, 0x12, 0x0a, 0x0a, 0x06, 0x50, 0x68, 0x79,
|
||||||
0x08, 0x0a, 0x04, 0x41, 0x78, 0x6c, 0x65, 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x4c, 0x6f, 0x67,
|
0x73, 0x69, 0x63, 0x10, 0x03, 0x42, 0x4c, 0x0a, 0x25, 0x63, 0x6c, 0x75, 0x62, 0x2e, 0x6a, 0x6f,
|
||||||
0x69, 0x63, 0x10, 0x02, 0x12, 0x0a, 0x0a, 0x06, 0x50, 0x68, 0x79, 0x73, 0x69, 0x63, 0x10, 0x03,
|
0x79, 0x6c, 0x69, 0x6e, 0x6b, 0x2e, 0x62, 0x6a, 0x72, 0x74, 0x73, 0x73, 0x2e, 0x61, 0x74, 0x73,
|
||||||
0x42, 0x4c, 0x0a, 0x25, 0x63, 0x6c, 0x75, 0x62, 0x2e, 0x6a, 0x6f, 0x79, 0x6c, 0x69, 0x6e, 0x6b,
|
0x2e, 0x76, 0x65, 0x72, 0x69, 0x66, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x42, 0x10,
|
||||||
0x2e, 0x62, 0x6a, 0x72, 0x74, 0x73, 0x73, 0x2e, 0x61, 0x74, 0x73, 0x2e, 0x76, 0x65, 0x72, 0x69,
|
0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f,
|
||||||
0x66, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x42, 0x10, 0x44, 0x65, 0x76, 0x69, 0x63,
|
0x5a, 0x11, 0x2e, 0x2f, 0x74, 0x73, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x2f, 0x73, 0x74,
|
||||||
0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x5a, 0x11, 0x2e, 0x2f, 0x74,
|
0x61, 0x74, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
|
||||||
0x73, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x62, 0x06,
|
|
||||||
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var (
|
var (
|
||||||
@ -2321,32 +2452,31 @@ var file_device_state_proto_goTypes = []interface{}{
|
|||||||
(*SimulationStatus)(nil), // 22: state.SimulationStatus
|
(*SimulationStatus)(nil), // 22: state.SimulationStatus
|
||||||
}
|
}
|
||||||
var file_device_state_proto_depIdxs = []int32{
|
var file_device_state_proto_depIdxs = []int32{
|
||||||
0, // 0: state.SectionState.type:type_name -> state.SectionType
|
1, // 0: state.SignalState.aspect:type_name -> state.Signal.Aspect
|
||||||
1, // 1: state.SignalState.aspect:type_name -> state.Signal.Aspect
|
11, // 1: state.TrainState.dynamicState:type_name -> state.TrainDynamicState
|
||||||
11, // 2: state.TrainState.dynamicState:type_name -> state.TrainDynamicState
|
12, // 2: state.TrainState.vobcState:type_name -> state.TrainVobcState
|
||||||
12, // 3: state.TrainState.vobcState:type_name -> state.TrainVobcState
|
10, // 3: state.VariationStatus.updatedTrain:type_name -> state.TrainState
|
||||||
10, // 4: state.VariationStatus.updatedTrain:type_name -> state.TrainState
|
5, // 4: state.VariationStatus.updatedSwitch:type_name -> state.SwitchState
|
||||||
5, // 5: state.VariationStatus.updatedSwitch:type_name -> state.SwitchState
|
4, // 5: state.VariationStatus.updatedSection:type_name -> state.SectionState
|
||||||
4, // 6: state.VariationStatus.updatedSection:type_name -> state.SectionState
|
13, // 6: state.VariationStatus.updatedReply:type_name -> state.ReplyState
|
||||||
13, // 7: state.VariationStatus.updatedReply:type_name -> state.ReplyState
|
10, // 7: state.AllDevicesStatus.trainState:type_name -> state.TrainState
|
||||||
10, // 8: state.AllDevicesStatus.trainState:type_name -> state.TrainState
|
5, // 8: state.AllDevicesStatus.switchState:type_name -> state.SwitchState
|
||||||
5, // 9: state.AllDevicesStatus.switchState:type_name -> state.SwitchState
|
4, // 9: state.AllDevicesStatus.sectionState:type_name -> state.SectionState
|
||||||
4, // 10: state.AllDevicesStatus.sectionState:type_name -> state.SectionState
|
13, // 10: state.AllDevicesStatus.replyState:type_name -> state.ReplyState
|
||||||
13, // 11: state.AllDevicesStatus.replyState:type_name -> state.ReplyState
|
6, // 11: state.AllDevicesStatus.signalState:type_name -> state.SignalState
|
||||||
6, // 12: state.AllDevicesStatus.signalState:type_name -> state.SignalState
|
14, // 12: state.AllDevicesStatus.buttonState:type_name -> state.ButtonState
|
||||||
14, // 13: state.AllDevicesStatus.buttonState:type_name -> state.ButtonState
|
15, // 13: state.AllDevicesStatus.AlarmState:type_name -> state.AlarmState
|
||||||
15, // 14: state.AllDevicesStatus.AlarmState:type_name -> state.AlarmState
|
16, // 14: state.AllDevicesStatus.LightState:type_name -> state.LightState
|
||||||
16, // 15: state.AllDevicesStatus.LightState:type_name -> state.LightState
|
17, // 15: state.AllDevicesStatus.psdState:type_name -> state.PsdState
|
||||||
17, // 16: state.AllDevicesStatus.psdState:type_name -> state.PsdState
|
18, // 16: state.AllDevicesStatus.KeyState:type_name -> state.KeyState
|
||||||
18, // 17: state.AllDevicesStatus.KeyState:type_name -> state.KeyState
|
19, // 17: state.PushedDevicesStatus.varStatus:type_name -> state.VariationStatus
|
||||||
19, // 18: state.PushedDevicesStatus.varStatus:type_name -> state.VariationStatus
|
20, // 18: state.PushedDevicesStatus.allStatus:type_name -> state.AllDevicesStatus
|
||||||
20, // 19: state.PushedDevicesStatus.allStatus:type_name -> state.AllDevicesStatus
|
2, // 19: state.SimulationStatus.state:type_name -> state.SimulationStatus.SimulationState
|
||||||
2, // 20: state.SimulationStatus.state:type_name -> state.SimulationStatus.SimulationState
|
20, // [20:20] is the sub-list for method output_type
|
||||||
21, // [21:21] is the sub-list for method output_type
|
20, // [20:20] is the sub-list for method input_type
|
||||||
21, // [21:21] is the sub-list for method input_type
|
20, // [20:20] is the sub-list for extension type_name
|
||||||
21, // [21:21] is the sub-list for extension type_name
|
20, // [20:20] is the sub-list for extension extendee
|
||||||
21, // [21:21] is the sub-list for extension extendee
|
0, // [0:20] is the sub-list for field type_name
|
||||||
0, // [0:21] is the sub-list for field type_name
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func init() { file_device_state_proto_init() }
|
func init() { file_device_state_proto_init() }
|
||||||
|
@ -327,6 +327,8 @@ func getUidMapByType(uidData any, m interface{}) map[string]*elementIdStructure
|
|||||||
return (uidData.(*StationUidStructure)).ButtonIds
|
return (uidData.(*StationUidStructure)).ButtonIds
|
||||||
case *graphicData.Station:
|
case *graphicData.Station:
|
||||||
return (uidData.(*StationUidStructure)).StationIds
|
return (uidData.(*StationUidStructure)).StationIds
|
||||||
|
case *graphicData.ScreenDoor:
|
||||||
|
return (uidData.(*StationUidStructure)).PsdIds
|
||||||
default:
|
default:
|
||||||
panic(&dto.ErrorDto{Code: dto.ArgumentParseError, Message: "类型未映射字段"})
|
panic(&dto.ErrorDto{Code: dto.ArgumentParseError, Message: "类型未映射字段"})
|
||||||
}
|
}
|
||||||
|
@ -1 +1,35 @@
|
|||||||
package memory
|
package memory
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"joylink.club/bj-rtsts-server/dto/request_proto"
|
||||||
|
"joylink.club/bj-rtsts-server/ts/protos/graphicData"
|
||||||
|
"joylink.club/rtsssimulation/fi"
|
||||||
|
)
|
||||||
|
|
||||||
|
// 处理道岔操作
|
||||||
|
func HandlePsdOperation(simulation *VerifySimulation, req *request_proto.PsdOperationReq) error {
|
||||||
|
uid := QueryUidByMidAndComId(req.MapId, req.DeviceId, &graphicData.ScreenDoor{})
|
||||||
|
switch req.Operation {
|
||||||
|
case request_proto.Psd_Km4:
|
||||||
|
return fi.SetInterlockKm4(simulation.World, uid)
|
||||||
|
case request_proto.Psd_CancelKm4:
|
||||||
|
return fi.CancelInterlockKm4(simulation.World, uid)
|
||||||
|
case request_proto.Psd_Km8:
|
||||||
|
return fi.SetInterlockKm8(simulation.World, uid)
|
||||||
|
case request_proto.Psd_CancelKm8:
|
||||||
|
return fi.CancelInterlockKm8(simulation.World, uid)
|
||||||
|
case request_proto.Psd_Gm:
|
||||||
|
return fi.SetInterlockGm(simulation.World, uid)
|
||||||
|
case request_proto.Psd_CancelGm:
|
||||||
|
return fi.CancelInterlockGm(simulation.World, uid)
|
||||||
|
case request_proto.Psd_ForceKm4:
|
||||||
|
|
||||||
|
case request_proto.Psd_ForceKm8:
|
||||||
|
|
||||||
|
case request_proto.Psd_ForceGm:
|
||||||
|
default:
|
||||||
|
panic(fmt.Sprintf("未知的道岔操作:%s", req.Operation))
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
110
ts/simulation/wayside/memory/wayside_memory_psd_test.go
Normal file
110
ts/simulation/wayside/memory/wayside_memory_psd_test.go
Normal file
@ -0,0 +1,110 @@
|
|||||||
|
package memory
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"joylink.club/bj-rtsts-server/dto/request_proto"
|
||||||
|
"joylink.club/bj-rtsts-server/ts"
|
||||||
|
"joylink.club/bj-rtsts-server/ts/protos/graphicData"
|
||||||
|
"joylink.club/rtsssimulation/component"
|
||||||
|
"joylink.club/rtsssimulation/consts"
|
||||||
|
"joylink.club/rtsssimulation/entity"
|
||||||
|
"testing"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
// 先创建一个仿真再调
|
||||||
|
func TestHandlePsdOperation(t *testing.T) {
|
||||||
|
simInfo := ts.ListAllSimulations()[0]
|
||||||
|
simId := simInfo.SimulationId
|
||||||
|
var mapId int32
|
||||||
|
for _, id := range simInfo.MapIds {
|
||||||
|
if QueryGiType(id) == graphicData.PictureType_StationLayout {
|
||||||
|
mapId = id
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if mapId == 0 {
|
||||||
|
fmt.Println("无信号布置图")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
data := QueryGiData[*graphicData.RtssGraphicStorage](mapId)
|
||||||
|
deviceId := data.ScreenDoors[0].Common.Id
|
||||||
|
|
||||||
|
simulation := ts.FindSimulation(simId)
|
||||||
|
wantErr := false
|
||||||
|
uid := QueryUidByMidAndComId(mapId, deviceId, &graphicData.Turnout{})
|
||||||
|
entry, _ := entity.GetEntityByUid(simulation.World, uid)
|
||||||
|
asdList := component.AsdListType.Get(entry)
|
||||||
|
psdModel := entity.GetWorldData(simulation.World).Repo.FindPsd(uid)
|
||||||
|
|
||||||
|
for key, value := range request_proto.Psd_Operation_value {
|
||||||
|
name := fmt.Sprintf("执行操作:%s", key)
|
||||||
|
req := &request_proto.PsdOperationReq{
|
||||||
|
SimulationId: "",
|
||||||
|
MapId: mapId,
|
||||||
|
DeviceId: deviceId,
|
||||||
|
Operation: request_proto.Psd_Operation(value),
|
||||||
|
}
|
||||||
|
t.Run(name, func(t *testing.T) {
|
||||||
|
if err := HandlePsdOperation(simulation, req); (err != nil) != wantErr {
|
||||||
|
t.Errorf("HandlePsdOperation() error = %v, wantErr %v", err, wantErr)
|
||||||
|
}
|
||||||
|
tick := time.Tick(5 * time.Second)
|
||||||
|
<-tick
|
||||||
|
switch req.Operation {
|
||||||
|
case request_proto.Psd_Km4:
|
||||||
|
group := psdModel.FindAsdGroup(4)
|
||||||
|
for i, asd := range asdList.List {
|
||||||
|
pos := component.TwoPositionTransformType.Get(asd).Pos
|
||||||
|
if int32(i) < group.Start || int32(i) > group.End {
|
||||||
|
if pos != consts.TwoPosMin {
|
||||||
|
t.Errorf("4编组开门操作[编号:%d]的滑动门位置[%d]不正确", i, pos)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if pos != consts.TwoPosMax {
|
||||||
|
t.Errorf(fmt.Sprintf("4编组开门操作[编号:%d]的滑动门位置[%d]不正确", i, pos))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
case request_proto.Psd_CancelKm4:
|
||||||
|
if component.PscType.Get(entry).InterlockKM4 == true {
|
||||||
|
t.Errorf("取消4编组开门失败")
|
||||||
|
}
|
||||||
|
case request_proto.Psd_Km8:
|
||||||
|
group := psdModel.FindAsdGroup(8)
|
||||||
|
for i, asd := range asdList.List {
|
||||||
|
pos := component.TwoPositionTransformType.Get(asd).Pos
|
||||||
|
if int32(i) < group.Start || int32(i) > group.End {
|
||||||
|
if pos != consts.TwoPosMin {
|
||||||
|
t.Errorf("8编组开门操作[编号:%d]的滑动门位置[%d]不正确", i, pos)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if pos != consts.TwoPosMax {
|
||||||
|
t.Errorf("8编组开门操作[编号:%d]的滑动门位置[%d]不正确", i, pos)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
case request_proto.Psd_CancelKm8:
|
||||||
|
if component.PscType.Get(entry).InterlockKM8 == true {
|
||||||
|
t.Errorf("取消8编组开门失败")
|
||||||
|
}
|
||||||
|
case request_proto.Psd_Gm:
|
||||||
|
for i, asd := range asdList.List {
|
||||||
|
pos := component.TwoPositionTransformType.Get(asd).Pos
|
||||||
|
if pos != consts.TwoPosMin {
|
||||||
|
t.Errorf("4编组开门操作[编号:%d]的滑动门位置[%d]不正确", i, pos)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
case request_proto.Psd_CancelGm:
|
||||||
|
if component.PscType.Get(entry).InterlockGM == true {
|
||||||
|
t.Errorf("取消关门失败")
|
||||||
|
}
|
||||||
|
case request_proto.Psd_ForceKm4:
|
||||||
|
|
||||||
|
case request_proto.Psd_ForceKm8:
|
||||||
|
|
||||||
|
case request_proto.Psd_ForceGm:
|
||||||
|
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
@ -1,28 +1,37 @@
|
|||||||
package memory
|
package memory
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"log/slog"
|
|
||||||
|
|
||||||
"joylink.club/bj-rtsts-server/dto"
|
"joylink.club/bj-rtsts-server/dto"
|
||||||
"joylink.club/bj-rtsts-server/dto/request_proto"
|
"joylink.club/bj-rtsts-server/dto/request_proto"
|
||||||
"joylink.club/bj-rtsts-server/ts/protos/graphicData"
|
"joylink.club/bj-rtsts-server/ts/protos/graphicData"
|
||||||
"joylink.club/rtsssimulation/fi"
|
"joylink.club/rtsssimulation/fi"
|
||||||
|
"log/slog"
|
||||||
)
|
)
|
||||||
|
|
||||||
func ChangeAxleSectionState(simulation *VerifySimulation, req *dto.AxleSectionOperationReqDto) {
|
func ChangeAxleSectionState(simulation *VerifySimulation, req *dto.AxleSectionOperationReqDto) error {
|
||||||
|
|
||||||
sectionUid := QueryUidByMidAndComId(req.MapId, req.DeviceId, &graphicData.Section{})
|
sectionUid := QueryUidByMidAndComId(req.MapId, req.DeviceId, &graphicData.Section{})
|
||||||
slog.Debug("操作计轴区段", "axleSectionUid", sectionUid)
|
slog.Debug("操作计轴区段", "axleSectionUid", sectionUid)
|
||||||
switch req.Operation {
|
if req.TrainIn {
|
||||||
case request_proto.Section_Drst:
|
return fi.AxleSectionTrainDrive(simulation.World, sectionUid, true)
|
||||||
fi.DriveAxleSectionDrst(simulation.World, sectionUid, req.Reset)
|
|
||||||
case request_proto.Section_Pdrst:
|
|
||||||
fi.DriveAxleSectionPdrst(simulation.World, sectionUid, req.Reset)
|
|
||||||
/*
|
|
||||||
case request_proto.Section_TrainIn:
|
|
||||||
fi.DriveAxleSectionTrainIn(simulation.World, sectionUid)
|
|
||||||
case request_proto.Section_TrainOut:
|
|
||||||
fi.DriveAxleSectionTrainOut(simulation.World, sectionUid)
|
|
||||||
*/
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
if req.TrainOut {
|
||||||
|
return fi.AxleSectionTrainDrive(simulation.World, sectionUid, false)
|
||||||
|
}
|
||||||
|
//
|
||||||
|
switch req.Operation {
|
||||||
|
case request_proto.Section_CancelDrst:
|
||||||
|
return fi.AxleSectionDrstDrive(simulation.World, sectionUid, false)
|
||||||
|
case request_proto.Section_SetDrst:
|
||||||
|
return fi.AxleSectionDrstDrive(simulation.World, sectionUid, true)
|
||||||
|
case request_proto.Section_CancelPdrst:
|
||||||
|
return fi.AxleSectionPdrstDrive(simulation.World, sectionUid, false)
|
||||||
|
case request_proto.Section_SetPdrst:
|
||||||
|
return fi.AxleSectionPdrstDrive(simulation.World, sectionUid, true)
|
||||||
|
case request_proto.Section_CancelFaultOcc:
|
||||||
|
return fi.AxleSectionFaultOccDrive(simulation.World, sectionUid, false)
|
||||||
|
case request_proto.Section_SetFaultOcc:
|
||||||
|
return fi.AxleSectionFaultOccDrive(simulation.World, sectionUid, true)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
@ -48,8 +48,6 @@ func AddTrainState(vs *VerifySimulation, status *state.TrainState, mapId int32)
|
|||||||
status.VobcState = &state.TrainVobcState{}
|
status.VobcState = &state.TrainVobcState{}
|
||||||
// 将信息合并到当前设备状态中
|
// 将信息合并到当前设备状态中
|
||||||
allTrainMap.Store(status.Id, status)
|
allTrainMap.Store(status.Id, status)
|
||||||
// 将变更信息放入变更状态队列中
|
|
||||||
vs.Memory.ChangeStatus.TrainStateMap.Store(status.Id, proto.Clone(status))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 修改列车状态
|
// 修改列车状态
|
||||||
@ -66,8 +64,6 @@ func UpdateTrainState(vs *VerifySimulation, status *state.TrainState) {
|
|||||||
proto.Merge(t, status)
|
proto.Merge(t, status)
|
||||||
// 更新全量信息
|
// 更新全量信息
|
||||||
allTrainMap.Store(status.Id, t)
|
allTrainMap.Store(status.Id, t)
|
||||||
// 将变更信息放入变更状态队列中
|
|
||||||
vs.Memory.ChangeStatus.TrainStateMap.Store(t.Id, proto.Clone(t))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 删除列车状态
|
// 删除列车状态
|
||||||
@ -86,9 +82,42 @@ func RemoveTrainState(vs *VerifySimulation, id string) {
|
|||||||
// 从仿真内存中移除列车
|
// 从仿真内存中移除列车
|
||||||
t.Show = false
|
t.Show = false
|
||||||
allTrainMap.Store(id, t)
|
allTrainMap.Store(id, t)
|
||||||
// 将列车Id放入移除列表
|
|
||||||
vs.Memory.ChangeStatus.RemoveTrainId = append(vs.Memory.ChangeStatus.RemoveTrainId, id)
|
|
||||||
} else {
|
} else {
|
||||||
panic(fmt.Sprintf("列车【%s】不存在", id))
|
panic(fmt.Sprintf("列车【%s】不存在", id))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
// 列车占用状态
|
||||||
|
func GetDeviceOccByTrainState(vs *VerifySimulation, ts *state.TrainState) {
|
||||||
|
if ts.DevicePort == "" { // 区段
|
||||||
|
if ts.PointTo { // 如果是运行方向是从A -> B
|
||||||
|
if ts.HeadOffset >= ts.TrainLength { // 如果车头偏移量大于车身长度,只占用当前区段
|
||||||
|
fmt.Println(ts.HeadDeviceUId)
|
||||||
|
} else { // 如果不够,向后找占用设备
|
||||||
|
s1 := vs.Repo.FindPhysicalSection(ts.HeadDeviceUId)
|
||||||
|
l := int64(math.Abs(float64(s1.BLinkPosition().Offset() - s1.ALinkPosition().Offset())))
|
||||||
|
// 剩余长度
|
||||||
|
sl := ts.TrainLength - l
|
||||||
|
// 寻找下一段设备
|
||||||
|
ar := s1.ARelation()
|
||||||
|
if condition {
|
||||||
|
|
||||||
|
}
|
||||||
|
if ar.Device().Type() == rtproto.DeviceType_DeviceType_PhysicalSection { // 区段
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
|
||||||
|
}
|
||||||
|
} else { // 道岔
|
||||||
|
|
||||||
|
}
|
||||||
|
// 车头所在位置、列车长度
|
||||||
|
// 运行方向
|
||||||
|
// 占用设备类型、设备长度
|
||||||
|
// 占用设备ID、设备偏移
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
@ -183,6 +183,7 @@ func convert(info *message.DynamicsTrainInfo, sta *state.TrainState, simulation
|
|||||||
slog.Debug("收到动力学原始消息", "Number", info.Number, "Link", info.Link, "LinkOffset", info.LinkOffset)
|
slog.Debug("收到动力学原始消息", "Number", info.Number, "Link", info.Link, "LinkOffset", info.LinkOffset)
|
||||||
id, port, offset, runDirection, pointTo, kilometer := QueryDeviceByCalcLink(simulation.Repo, strconv.Itoa(int(info.Link)), int64(info.LinkOffset), info.Up)
|
id, port, offset, runDirection, pointTo, kilometer := QueryDeviceByCalcLink(simulation.Repo, strconv.Itoa(int(info.Link)), int64(info.LinkOffset), info.Up)
|
||||||
slog.Debug("处理动力学转换后的消息", "number", info.Number, "车头位置", id, "偏移", offset, "是否上行", runDirection, "是否ab", pointTo)
|
slog.Debug("处理动力学转换后的消息", "number", info.Number, "车头位置", id, "偏移", offset, "是否上行", runDirection, "是否ab", pointTo)
|
||||||
|
sta.HeadDeviceUId = id
|
||||||
sta.HeadDeviceId = simulation.GetComIdByUid(id)
|
sta.HeadDeviceId = simulation.GetComIdByUid(id)
|
||||||
sta.DevicePort = port
|
sta.DevicePort = port
|
||||||
sta.HeadOffset = offset
|
sta.HeadOffset = offset
|
||||||
@ -326,30 +327,56 @@ func (s *VerifySimulation) GetSemiPhysicalRunConfig() *config.VobcConfig {
|
|||||||
return &s.runConfig.Vobc
|
return &s.runConfig.Vobc
|
||||||
}
|
}
|
||||||
|
|
||||||
// 处理接到的联锁消息
|
// 获取所有联锁配置唯一Code
|
||||||
func (s *VerifySimulation) HandleInterlockDriverInfo(b []byte) {
|
func (s *VerifySimulation) GetInterlockCodes() []*config.InterlockConfig {
|
||||||
driverMsg := message.NewInterlockReceiveMsgPkg(0, 128, 8*131)
|
stationMap := make(map[string]string)
|
||||||
driverMsg.Decode(b)
|
for _, station := range s.Repo.StationList() {
|
||||||
driveState := driverMsg.DriveInfo
|
stationMap[station.GetCode()] = station.Id()
|
||||||
for x, lenght := 0, len(driveState); x < lenght/32; x++ {
|
|
||||||
for y := 0; y < 32; y++ {
|
|
||||||
fi.DriveCircuitStateChange(s.World, x, y, driveState[x*32+y])
|
|
||||||
}
|
}
|
||||||
|
var configs []*config.InterlockConfig
|
||||||
|
for _, c := range s.runConfig.Interlocks {
|
||||||
|
if stationMap[c.Code] == "" || !c.Open {
|
||||||
|
continue
|
||||||
}
|
}
|
||||||
|
configs = append(configs, &config.InterlockConfig{
|
||||||
|
Code: stationMap[c.Code],
|
||||||
|
Ip: c.Ip,
|
||||||
|
LocalPort: c.LocalPort,
|
||||||
|
RemotePort: c.RemotePort,
|
||||||
|
Open: c.Open,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
return configs
|
||||||
}
|
}
|
||||||
|
|
||||||
// 获取联锁配置
|
// 处理接到的联锁消息
|
||||||
func (s *VerifySimulation) GetInterlockRunConfig() *config.InterlockConfig {
|
func (s *VerifySimulation) HandleInterlockDriverInfo(code string, b []byte) {
|
||||||
return &s.runConfig.Interlock
|
for _, m := range s.Repo.CentralizedList() { // 获取继电器地图信息
|
||||||
|
if m.StationId != code {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
driverMsg := message.NewInterlockReceiveMsgPkg(0, len(m.QdList), len(m.TransponderId))
|
||||||
|
driverMsg.Decode(b)
|
||||||
|
driveState := driverMsg.DriveInfo
|
||||||
|
for i, r := range m.QdList {
|
||||||
|
ds := driveState[i]
|
||||||
|
for _, b := range r.RefRelays {
|
||||||
|
slog.Debug("继电器位【%s】获取到驱动状态【%v】", b, ds)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 采集联锁中的继电器消息
|
// 采集联锁中的继电器消息
|
||||||
func (s *VerifySimulation) CollectInterlockRelayInfo() []*message.InterlockSendMsgPkg {
|
func (s *VerifySimulation) CollectInterlockRelayInfo(code string) *message.InterlockSendMsgPkg {
|
||||||
var msgPkgs []*message.InterlockSendMsgPkg
|
|
||||||
for _, m := range s.Repo.CentralizedList() { // 获取继电器地图信息
|
for _, m := range s.Repo.CentralizedList() { // 获取继电器地图信息
|
||||||
if len(m.CjList) == 0 {
|
if m.StationId != code {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
if len(m.CjList) == 0 {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
collectInfo := make([]bool, len(m.CjList))
|
collectInfo := make([]bool, len(m.CjList))
|
||||||
for i, l := range m.CjList {
|
for i, l := range m.CjList {
|
||||||
if l == nil || len(l.RefRelays) == 0 {
|
if l == nil || len(l.RefRelays) == 0 {
|
||||||
@ -362,12 +389,15 @@ func (s *VerifySimulation) CollectInterlockRelayInfo() []*message.InterlockSendM
|
|||||||
} else {
|
} else {
|
||||||
rs = rs && fi.CollectLXCircuitState(s.World, j.RelayId)
|
rs = rs && fi.CollectLXCircuitState(s.World, j.RelayId)
|
||||||
}
|
}
|
||||||
|
if !rs {
|
||||||
|
break
|
||||||
|
}
|
||||||
}
|
}
|
||||||
collectInfo[i] = rs
|
collectInfo[i] = rs
|
||||||
}
|
}
|
||||||
msgPkgs = append(msgPkgs, &message.InterlockSendMsgPkg{Info: collectInfo})
|
return &message.InterlockSendMsgPkg{Info: collectInfo}
|
||||||
}
|
}
|
||||||
return msgPkgs
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// 初始化仿真运行配置
|
// 初始化仿真运行配置
|
||||||
@ -586,17 +616,18 @@ func buildAndRelateElectronicComponent(repo *proto.Repository, relayGi *graphicD
|
|||||||
}
|
}
|
||||||
for _, group := range station.ElectronicGroup {
|
for _, group := range station.ElectronicGroup {
|
||||||
if group.Code == "MKX" {
|
if group.Code == "MKX" {
|
||||||
var componentIds []string
|
|
||||||
for _, component := range group.Components {
|
for _, component := range group.Components {
|
||||||
relay := relayMap[component.Id]
|
relay := relayMap[component.Id]
|
||||||
if strings.Contains(relay.GetCode(), s) {
|
if strings.Contains(relay.GetCode(), s) {
|
||||||
componentIds = append(componentIds, relay.Id)
|
if strings.Contains(relay.GetCode(), "PCB") {
|
||||||
|
mkx.PcbjId = relay.Id
|
||||||
|
} else if strings.Contains(relay.GetCode(), "POB") {
|
||||||
|
mkx.PobjId = relay.Id
|
||||||
|
} else if strings.Contains(relay.GetCode(), "PAB") {
|
||||||
|
mkx.PabjId = relay.Id
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
mkx.ElectronicComponentGroups = append(mkx.ElectronicComponentGroups, &proto.ElectronicComponentGroup{
|
|
||||||
Code: group.Code,
|
|
||||||
ComponentIds: componentIds,
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -743,11 +774,16 @@ func fillProtoRepository(repo *proto.Repository, storage *graphicData.RtssGraphi
|
|||||||
if data.SectionType == graphicData.Section_TurnoutPhysical {
|
if data.SectionType == graphicData.Section_TurnoutPhysical {
|
||||||
turnoutIds = findTurnoutIds(axleCountingMap, data.AxleCountings)
|
turnoutIds = findTurnoutIds(axleCountingMap, data.AxleCountings)
|
||||||
}
|
}
|
||||||
|
centralizedStation := ""
|
||||||
|
if len(data.CentralizedStations) > 0 {
|
||||||
|
centralizedStation = data.CentralizedStations[0]
|
||||||
|
}
|
||||||
physicalSection := &proto.PhysicalSection{
|
physicalSection := &proto.PhysicalSection{
|
||||||
Id: data.Common.Id,
|
Id: data.Common.Id,
|
||||||
ADevicePort: convertDevicePort(data.PaRef),
|
ADevicePort: convertDevicePort(data.PaRef),
|
||||||
BDevicePort: convertDevicePort(data.PbRef),
|
BDevicePort: convertDevicePort(data.PbRef),
|
||||||
TurnoutIds: turnoutIds,
|
TurnoutIds: turnoutIds,
|
||||||
|
CentralizedStation: centralizedStation,
|
||||||
}
|
}
|
||||||
repo.PhysicalSections = append(repo.PhysicalSections, converSectionUid(physicalSection, uidsMap))
|
repo.PhysicalSections = append(repo.PhysicalSections, converSectionUid(physicalSection, uidsMap))
|
||||||
}
|
}
|
||||||
@ -907,17 +943,12 @@ func fillProtoRepository(repo *proto.Repository, storage *graphicData.RtssGraphi
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
//门控箱
|
//门控箱
|
||||||
gateBoxMap := make(map[string]*proto.Mkx)
|
|
||||||
for _, data := range storage.GateBoxs {
|
for _, data := range storage.GateBoxs {
|
||||||
mkx, ok := gateBoxMap[data.RefScreenDoor]
|
mkx := &proto.Mkx{
|
||||||
if !ok {
|
|
||||||
mkx = &proto.Mkx{
|
|
||||||
Id: uidsMap.GateBoxIds[data.Common.Id].Uid,
|
Id: uidsMap.GateBoxIds[data.Common.Id].Uid,
|
||||||
PsdId: uidsMap.PsdIds[data.RefScreenDoor].Uid,
|
PsdId: uidsMap.PsdIds[data.RefScreenDoor].Uid,
|
||||||
}
|
}
|
||||||
repo.Mkxs = append(repo.Mkxs, mkx)
|
repo.Mkxs = append(repo.Mkxs, mkx)
|
||||||
gateBoxMap[data.RefScreenDoor] = mkx
|
|
||||||
}
|
|
||||||
pslMapId := QueryGiId(data.RefGatedBoxMapCode)
|
pslMapId := QueryGiId(data.RefGatedBoxMapCode)
|
||||||
pslStorage := QueryGiData[*graphicData.PslGraphicStorage](pslMapId)
|
pslStorage := QueryGiData[*graphicData.PslGraphicStorage](pslMapId)
|
||||||
for _, button := range pslStorage.PslButtons {
|
for _, button := range pslStorage.PslButtons {
|
||||||
@ -930,11 +961,11 @@ func fillProtoRepository(repo *proto.Repository, storage *graphicData.RtssGraphi
|
|||||||
repo.Buttons = append(repo.Buttons, repoButton)
|
repo.Buttons = append(repo.Buttons, repoButton)
|
||||||
switch button.Code {
|
switch button.Code {
|
||||||
case "PCB":
|
case "PCB":
|
||||||
mkx.PcbButtonIds = append(mkx.PcbButtonIds, repoButton.Id)
|
mkx.PcbButtonId = repoButton.Id
|
||||||
case "POB":
|
case "POB":
|
||||||
mkx.PobButtonIds = append(mkx.PobButtonIds, repoButton.Id)
|
mkx.PobButtonId = repoButton.Id
|
||||||
case "PAB":
|
case "PAB":
|
||||||
mkx.PabButtonIds = append(mkx.PabButtonIds, repoButton.Id)
|
mkx.PabButtonId = repoButton.Id
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -952,8 +983,18 @@ func fillProtoRepository(repo *proto.Repository, storage *graphicData.RtssGraphi
|
|||||||
}
|
}
|
||||||
//屏蔽门
|
//屏蔽门
|
||||||
for _, data := range storage.ScreenDoors {
|
for _, data := range storage.ScreenDoors {
|
||||||
|
var asdGroups []*proto.AsdGroup
|
||||||
|
for _, group := range data.ScreenDoorGroupList {
|
||||||
|
asdGroups = append(asdGroups, &proto.AsdGroup{
|
||||||
|
Group: group.TrainGroupAmount,
|
||||||
|
Start: group.StartSmallDoor,
|
||||||
|
End: group.EndSmallDoor,
|
||||||
|
})
|
||||||
|
}
|
||||||
psd := &proto.Psd{
|
psd := &proto.Psd{
|
||||||
Id: uidsMap.PsdIds[data.Common.Id].Uid,
|
Id: uidsMap.PsdIds[data.Common.Id].Uid,
|
||||||
|
AsdAmount: data.SonDoorAmount,
|
||||||
|
AsdGroups: asdGroups,
|
||||||
PlatformId: uidsMap.PlatformIds[data.RefPlatformId].Uid,
|
PlatformId: uidsMap.PlatformIds[data.RefPlatformId].Uid,
|
||||||
}
|
}
|
||||||
repo.Psds = append(repo.Psds, psd)
|
repo.Psds = append(repo.Psds, psd)
|
||||||
|
@ -106,7 +106,9 @@ func runThirdParty(s *memory.VerifySimulation) error {
|
|||||||
// 半实物启动
|
// 半实物启动
|
||||||
semi_physical_train.Default().Start(s)
|
semi_physical_train.Default().Start(s)
|
||||||
// 联锁启动
|
// 联锁启动
|
||||||
interlock.Default().Start(s)
|
for _, c := range s.GetInterlockCodes() {
|
||||||
|
interlock.Default(c).Start(s)
|
||||||
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -117,7 +119,9 @@ func stopThirdParty(s *memory.VerifySimulation) {
|
|||||||
// 停止半实物
|
// 停止半实物
|
||||||
semi_physical_train.Default().Stop()
|
semi_physical_train.Default().Stop()
|
||||||
// 联锁启动
|
// 联锁启动
|
||||||
interlock.Default().Stop()
|
for _, c := range s.GetInterlockCodes() {
|
||||||
|
interlock.Default(c).Stop()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func createSimulationId(projectId int32) string {
|
func createSimulationId(projectId int32) string {
|
||||||
|
Loading…
Reference in New Issue
Block a user