diff --git a/components/button.go b/components/button.go index 64a1459..493799f 100644 --- a/components/button.go +++ b/components/button.go @@ -2,14 +2,14 @@ package components import ( "joylink.club/ecs" - "joylink.club/rtsssimulation/state" + "joylink.club/rtsssimulation/cstate" ) // 按钮状态组件 -var ButtonStateComponent = ecs.NewComponentType[state.ButtonState]() +var ButtonStateComponent = ecs.NewComponentType[cstate.ButtonState]() // 按钮操作组件 -var ButtonPressOperatingComponent = ecs.NewComponentType[state.ButtonPressOperating]() +var ButtonPressOperatingComponent = ecs.NewComponentType[cstate.ButtonPressOperating]() // 按钮确认组件 -var ButtonConfirmOperatingComponent = ecs.NewComponentType[state.ButtonConfirmOperating]() +var ButtonConfirmOperatingComponent = ecs.NewComponentType[cstate.ButtonConfirmOperating]() diff --git a/components/common.go b/components/common.go index c3f8b51..ed75741 100644 --- a/components/common.go +++ b/components/common.go @@ -2,39 +2,39 @@ package components import ( "joylink.club/ecs" - "joylink.club/rtsssimulation/state" + "joylink.club/rtsssimulation/cstate" ) // 系统时钟组件 -var SystemTimerComponent = ecs.NewComponentType[state.SystemTimer]() +var SystemTimerComponent = ecs.NewComponentType[cstate.SystemTimer]() // 身份组件 -var DeviceIdentityComponent = ecs.NewComponentType[state.DeviceIdentity]() +var DeviceIdentityComponent = ecs.NewComponentType[cstate.DeviceIdentity]() // 持有实体标签的组件 -var EntityTagHandlerComponent = ecs.NewComponentType[state.EntityTagHandler]() +var EntityTagHandlerComponent = ecs.NewComponentType[cstate.EntityTagHandler]() // 百分比设备组件 -var PercentageDeviceComponent = ecs.NewComponentType[state.PercentageDeviceState]() -var PercentageDeviceOperatingComponent = ecs.NewComponentType[state.PercentageDeviceOperating]() +var PercentageDeviceComponent = ecs.NewComponentType[cstate.PercentageDeviceState]() +var PercentageDeviceOperatingComponent = ecs.NewComponentType[cstate.PercentageDeviceOperating]() // 道岔继电器状态组件 -var SwitchRelayStateComponent = ecs.NewComponentType[state.SwitchRelayState]() +var SwitchRelayStateComponent = ecs.NewComponentType[cstate.SwitchRelayState]() // 物理区段状态组件 -var PhysicalSectionStateComponent = ecs.NewComponentType[state.PhysicalSectionState]() +var PhysicalSectionStateComponent = ecs.NewComponentType[cstate.PhysicalSectionState]() // 信号机状态组件 -var SignalStateComponent = ecs.NewComponentType[state.SignalState]() +var SignalStateComponent = ecs.NewComponentType[cstate.SignalState]() // 信号机显示操作组件 -var SignalDisplayOperatingComponent = ecs.NewComponentType[state.SignalDisplayOperating]() +var SignalDisplayOperatingComponent = ecs.NewComponentType[cstate.SignalDisplayOperating]() // 站台单侧屏蔽门状态组件 -var PsdStateComponent = ecs.NewComponentType[state.PsdState]() +var PsdStateComponent = ecs.NewComponentType[cstate.PsdState]() // 应答器状态组件 -var BaliseStateComponent = ecs.NewComponentType[state.BaliseState]() +var BaliseStateComponent = ecs.NewComponentType[cstate.BaliseState]() // 列车状态组件 -var TrainStateComponent = ecs.NewComponentType[state.TrainState]() +var TrainStateComponent = ecs.NewComponentType[cstate.TrainState]() diff --git a/state/status.pb.go b/cstate/status.pb.go similarity index 73% rename from state/status.pb.go rename to cstate/status.pb.go index c8a49d6..4e568fb 100644 --- a/state/status.pb.go +++ b/cstate/status.pb.go @@ -4,7 +4,7 @@ // protoc v4.23.1 // source: status.proto -package state +package cstate import ( protoreflect "google.golang.org/protobuf/reflect/protoreflect" @@ -425,7 +425,7 @@ type SignalState struct { unknownFields protoimpl.UnknownFields // 信号机显示状态 - Display SignalAspect `protobuf:"varint,1,opt,name=display,proto3,enum=state.SignalAspect" json:"display,omitempty"` + Display SignalAspect `protobuf:"varint,1,opt,name=display,proto3,enum=cstate.SignalAspect" json:"display,omitempty"` } func (x *SignalState) Reset() { @@ -478,7 +478,7 @@ type SignalDisplayOperating struct { // 执行操作剩余时长,单位ms OperateTime int64 `protobuf:"varint,2,opt,name=operateTime,proto3" json:"operateTime,omitempty"` // 信号机目标显示 - TargetAspect SignalAspect `protobuf:"varint,3,opt,name=targetAspect,proto3,enum=state.SignalAspect" json:"targetAspect,omitempty"` + TargetAspect SignalAspect `protobuf:"varint,3,opt,name=targetAspect,proto3,enum=cstate.SignalAspect" json:"targetAspect,omitempty"` } func (x *SignalDisplayOperating) Reset() { @@ -926,7 +926,7 @@ type TrainState struct { unknownFields protoimpl.UnknownFields // 列车激活端 - ActiveHead TrainActiveEnum `protobuf:"varint,1,opt,name=activeHead,proto3,enum=state.TrainActiveEnum" json:"activeHead,omitempty"` + ActiveHead TrainActiveEnum `protobuf:"varint,1,opt,name=activeHead,proto3,enum=cstate.TrainActiveEnum" json:"activeHead,omitempty"` // 列车所占的轨道位置列表 OccupiedLinks []*OccupiedLinkPosition `protobuf:"bytes,7,rep,name=occupiedLinks,proto3" json:"occupiedLinks,omitempty"` } @@ -1163,115 +1163,115 @@ func (x *ButtonConfirmOperating) GetCancel() bool { var File_status_proto protoreflect.FileDescriptor var file_status_proto_rawDesc = []byte{ - 0x0a, 0x0c, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x05, - 0x73, 0x74, 0x61, 0x74, 0x65, 0x22, 0x20, 0x0a, 0x0e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, - 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x5a, 0x0a, 0x10, 0x53, 0x77, 0x69, 0x74, 0x63, - 0x68, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x64, - 0x63, 0x4a, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x64, 0x63, 0x4a, 0x12, 0x10, 0x0a, - 0x03, 0x66, 0x63, 0x4a, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x66, 0x63, 0x4a, 0x12, - 0x10, 0x0a, 0x03, 0x64, 0x62, 0x4a, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x64, 0x62, - 0x4a, 0x12, 0x10, 0x0a, 0x03, 0x66, 0x62, 0x4a, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, - 0x66, 0x62, 0x4a, 0x22, 0x32, 0x0a, 0x14, 0x50, 0x68, 0x79, 0x73, 0x69, 0x63, 0x61, 0x6c, 0x53, - 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6f, - 0x63, 0x63, 0x75, 0x70, 0x69, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x6f, - 0x63, 0x63, 0x75, 0x70, 0x69, 0x65, 0x64, 0x22, 0x3c, 0x0a, 0x0b, 0x53, 0x69, 0x67, 0x6e, 0x61, - 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x2d, 0x0a, 0x07, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, - 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x13, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, - 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x41, 0x73, 0x70, 0x65, 0x63, 0x74, 0x52, 0x07, 0x64, 0x69, - 0x73, 0x70, 0x6c, 0x61, 0x79, 0x22, 0x97, 0x01, 0x0a, 0x16, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, - 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6e, 0x67, - 0x12, 0x22, 0x0a, 0x0c, 0x73, 0x74, 0x61, 0x72, 0x74, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x73, 0x74, 0x61, 0x72, 0x74, 0x4f, 0x70, 0x65, - 0x72, 0x61, 0x74, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x65, 0x54, - 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x6f, 0x70, 0x65, 0x72, 0x61, - 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x37, 0x0a, 0x0c, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, - 0x41, 0x73, 0x70, 0x65, 0x63, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x13, 0x2e, 0x73, - 0x74, 0x61, 0x74, 0x65, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x41, 0x73, 0x70, 0x65, 0x63, - 0x74, 0x52, 0x0c, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x41, 0x73, 0x70, 0x65, 0x63, 0x74, 0x22, - 0x74, 0x0a, 0x08, 0x50, 0x73, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x61, - 0x6c, 0x6c, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, - 0x61, 0x6c, 0x6c, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x6c, 0x6c, - 0x4f, 0x70, 0x65, 0x6e, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x61, 0x6c, - 0x6c, 0x4f, 0x70, 0x65, 0x6e, 0x65, 0x64, 0x12, 0x2c, 0x0a, 0x11, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x11, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x6c, - 0x65, 0x61, 0x73, 0x65, 0x64, 0x22, 0x2b, 0x0a, 0x15, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, - 0x61, 0x67, 0x65, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x12, - 0x0a, 0x04, 0x72, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x72, 0x61, - 0x74, 0x65, 0x22, 0xc1, 0x01, 0x0a, 0x19, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, - 0x65, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6e, 0x67, - 0x12, 0x10, 0x0a, 0x03, 0x74, 0x6f, 0x48, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x74, - 0x6f, 0x48, 0x12, 0x1e, 0x0a, 0x0a, 0x6c, 0x68, 0x44, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x6c, 0x68, 0x44, 0x69, 0x73, 0x74, 0x61, 0x6e, - 0x63, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x69, 0x6e, 0x69, 0x74, 0x44, 0x69, 0x73, 0x74, 0x61, 0x6e, - 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x69, 0x6e, 0x69, 0x74, 0x44, 0x69, - 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x73, 0x75, 0x6d, 0x44, 0x69, 0x73, - 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x73, 0x75, 0x6d, - 0x44, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x2c, 0x0a, 0x11, 0x72, 0x65, 0x6d, 0x61, - 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x11, 0x72, 0x65, 0x6d, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x44, 0x69, - 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x22, 0x3d, 0x0a, 0x0b, 0x42, 0x61, 0x6c, 0x69, 0x73, 0x65, - 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x2e, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x42, - 0x61, 0x6c, 0x69, 0x73, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x52, 0x07, 0x63, 0x6f, - 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x22, 0x4d, 0x0a, 0x0d, 0x42, 0x61, 0x6c, 0x69, 0x73, 0x65, 0x43, - 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, - 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x63, 0x6f, 0x6e, - 0x74, 0x65, 0x6e, 0x74, 0x22, 0x6e, 0x0a, 0x14, 0x4f, 0x63, 0x63, 0x75, 0x70, 0x69, 0x65, 0x64, - 0x4c, 0x69, 0x6e, 0x6b, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, - 0x6c, 0x69, 0x6e, 0x6b, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6c, 0x69, - 0x6e, 0x6b, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x73, 0x74, 0x61, 0x72, 0x74, 0x4f, 0x66, 0x66, - 0x73, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x73, 0x74, 0x61, 0x72, 0x74, - 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x65, 0x6e, 0x64, 0x4f, 0x66, 0x66, - 0x73, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x65, 0x6e, 0x64, 0x4f, 0x66, - 0x66, 0x73, 0x65, 0x74, 0x22, 0x87, 0x01, 0x0a, 0x0a, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x53, 0x74, - 0x61, 0x74, 0x65, 0x12, 0x36, 0x0a, 0x0a, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x48, 0x65, 0x61, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x16, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, - 0x54, 0x72, 0x61, 0x69, 0x6e, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x52, - 0x0a, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x48, 0x65, 0x61, 0x64, 0x12, 0x41, 0x0a, 0x0d, 0x6f, - 0x63, 0x63, 0x75, 0x70, 0x69, 0x65, 0x64, 0x4c, 0x69, 0x6e, 0x6b, 0x73, 0x18, 0x07, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x4f, 0x63, 0x63, 0x75, 0x70, - 0x69, 0x65, 0x64, 0x4c, 0x69, 0x6e, 0x6b, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x0d, 0x6f, 0x63, 0x63, 0x75, 0x70, 0x69, 0x65, 0x64, 0x4c, 0x69, 0x6e, 0x6b, 0x73, 0x22, 0x2b, - 0x0a, 0x0b, 0x42, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1c, 0x0a, - 0x09, 0x70, 0x72, 0x65, 0x73, 0x73, 0x44, 0x6f, 0x77, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x09, 0x70, 0x72, 0x65, 0x73, 0x73, 0x44, 0x6f, 0x77, 0x6e, 0x22, 0x84, 0x01, 0x0a, 0x14, - 0x42, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x73, 0x73, 0x4f, 0x70, 0x65, 0x72, 0x61, - 0x74, 0x69, 0x6e, 0x67, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x6f, - 0x77, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x64, 0x6f, 0x77, 0x6e, 0x12, 0x20, - 0x0a, 0x0b, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x0b, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, - 0x12, 0x20, 0x0a, 0x0b, 0x6e, 0x65, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x6e, 0x65, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x72, 0x6d, 0x22, 0x4a, 0x0a, 0x16, 0x42, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x72, 0x6d, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x18, 0x0a, 0x07, - 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x61, 0x6e, 0x63, 0x65, 0x6c, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x63, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x2a, 0x68, - 0x0a, 0x0a, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x07, 0x0a, 0x03, - 0x41, 0x6e, 0x79, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x4c, 0x69, 0x6e, 0x6b, 0x10, 0x01, 0x12, - 0x0a, 0x0a, 0x06, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x10, 0x02, 0x12, 0x0a, 0x0a, 0x06, 0x53, - 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x10, 0x03, 0x12, 0x07, 0x0a, 0x03, 0x50, 0x73, 0x64, 0x10, 0x04, - 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x73, 0x64, 0x43, 0x65, 0x6c, 0x6c, 0x10, 0x05, 0x12, 0x0d, 0x0a, - 0x09, 0x41, 0x78, 0x6c, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x10, 0x06, 0x12, 0x0a, 0x0a, 0x06, - 0x42, 0x61, 0x6c, 0x69, 0x73, 0x65, 0x10, 0x07, 0x2a, 0x81, 0x01, 0x0a, 0x0c, 0x53, 0x69, 0x67, - 0x6e, 0x61, 0x6c, 0x41, 0x73, 0x70, 0x65, 0x63, 0x74, 0x12, 0x06, 0x0a, 0x02, 0x4e, 0x6f, 0x10, - 0x00, 0x12, 0x05, 0x0a, 0x01, 0x52, 0x10, 0x01, 0x12, 0x05, 0x0a, 0x01, 0x47, 0x10, 0x02, 0x12, - 0x05, 0x0a, 0x01, 0x59, 0x10, 0x03, 0x12, 0x05, 0x0a, 0x01, 0x57, 0x10, 0x04, 0x12, 0x05, 0x0a, - 0x01, 0x42, 0x10, 0x05, 0x12, 0x06, 0x0a, 0x02, 0x52, 0x59, 0x10, 0x06, 0x12, 0x06, 0x0a, 0x02, - 0x52, 0x57, 0x10, 0x07, 0x12, 0x06, 0x0a, 0x02, 0x47, 0x47, 0x10, 0x08, 0x12, 0x06, 0x0a, 0x02, - 0x47, 0x59, 0x10, 0x09, 0x12, 0x06, 0x0a, 0x02, 0x59, 0x59, 0x10, 0x0a, 0x12, 0x06, 0x0a, 0x02, - 0x52, 0x46, 0x10, 0x0b, 0x12, 0x06, 0x0a, 0x02, 0x59, 0x46, 0x10, 0x0c, 0x12, 0x06, 0x0a, 0x02, - 0x47, 0x46, 0x10, 0x0d, 0x12, 0x06, 0x0a, 0x02, 0x57, 0x46, 0x10, 0x0e, 0x2a, 0x35, 0x0a, 0x0f, - 0x54, 0x72, 0x61, 0x69, 0x6e, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x12, - 0x0a, 0x0a, 0x06, 0x48, 0x45, 0x41, 0x44, 0x5f, 0x4e, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x48, - 0x45, 0x41, 0x44, 0x5f, 0x41, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x48, 0x45, 0x41, 0x44, 0x5f, - 0x42, 0x10, 0x02, 0x42, 0x09, 0x5a, 0x07, 0x2e, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x62, 0x06, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x0a, 0x0c, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x06, + 0x63, 0x73, 0x74, 0x61, 0x74, 0x65, 0x22, 0x20, 0x0a, 0x0e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, + 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x5a, 0x0a, 0x10, 0x53, 0x77, 0x69, 0x74, + 0x63, 0x68, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x10, 0x0a, 0x03, + 0x64, 0x63, 0x4a, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x64, 0x63, 0x4a, 0x12, 0x10, + 0x0a, 0x03, 0x66, 0x63, 0x4a, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x66, 0x63, 0x4a, + 0x12, 0x10, 0x0a, 0x03, 0x64, 0x62, 0x4a, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x64, + 0x62, 0x4a, 0x12, 0x10, 0x0a, 0x03, 0x66, 0x62, 0x4a, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x03, 0x66, 0x62, 0x4a, 0x22, 0x32, 0x0a, 0x14, 0x50, 0x68, 0x79, 0x73, 0x69, 0x63, 0x61, 0x6c, + 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1a, 0x0a, 0x08, + 0x6f, 0x63, 0x63, 0x75, 0x70, 0x69, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, + 0x6f, 0x63, 0x63, 0x75, 0x70, 0x69, 0x65, 0x64, 0x22, 0x3d, 0x0a, 0x0b, 0x53, 0x69, 0x67, 0x6e, + 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x2e, 0x0a, 0x07, 0x64, 0x69, 0x73, 0x70, 0x6c, + 0x61, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x63, 0x73, 0x74, 0x61, 0x74, + 0x65, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x41, 0x73, 0x70, 0x65, 0x63, 0x74, 0x52, 0x07, + 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x22, 0x98, 0x01, 0x0a, 0x16, 0x53, 0x69, 0x67, 0x6e, + 0x61, 0x6c, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, + 0x6e, 0x67, 0x12, 0x22, 0x0a, 0x0c, 0x73, 0x74, 0x61, 0x72, 0x74, 0x4f, 0x70, 0x65, 0x72, 0x61, + 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x73, 0x74, 0x61, 0x72, 0x74, 0x4f, + 0x70, 0x65, 0x72, 0x61, 0x74, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, + 0x65, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x6f, 0x70, 0x65, + 0x72, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x38, 0x0a, 0x0c, 0x74, 0x61, 0x72, 0x67, + 0x65, 0x74, 0x41, 0x73, 0x70, 0x65, 0x63, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x14, + 0x2e, 0x63, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x41, 0x73, + 0x70, 0x65, 0x63, 0x74, 0x52, 0x0c, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x41, 0x73, 0x70, 0x65, + 0x63, 0x74, 0x22, 0x74, 0x0a, 0x08, 0x50, 0x73, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1c, + 0x0a, 0x09, 0x61, 0x6c, 0x6c, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x09, 0x61, 0x6c, 0x6c, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x64, 0x12, 0x1c, 0x0a, 0x09, + 0x61, 0x6c, 0x6c, 0x4f, 0x70, 0x65, 0x6e, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x09, 0x61, 0x6c, 0x6c, 0x4f, 0x70, 0x65, 0x6e, 0x65, 0x64, 0x12, 0x2c, 0x0a, 0x11, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6c, 0x6f, 0x63, 0x6b, + 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x22, 0x2b, 0x0a, 0x15, 0x50, 0x65, 0x72, 0x63, + 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, + 0x65, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x04, 0x72, 0x61, 0x74, 0x65, 0x22, 0xc1, 0x01, 0x0a, 0x19, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, + 0x74, 0x61, 0x67, 0x65, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, + 0x69, 0x6e, 0x67, 0x12, 0x10, 0x0a, 0x03, 0x74, 0x6f, 0x48, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x03, 0x74, 0x6f, 0x48, 0x12, 0x1e, 0x0a, 0x0a, 0x6c, 0x68, 0x44, 0x69, 0x73, 0x74, 0x61, + 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x6c, 0x68, 0x44, 0x69, 0x73, + 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x69, 0x6e, 0x69, 0x74, 0x44, 0x69, 0x73, + 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x69, 0x6e, 0x69, + 0x74, 0x44, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x73, 0x75, 0x6d, + 0x44, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, + 0x73, 0x75, 0x6d, 0x44, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x2c, 0x0a, 0x11, 0x72, + 0x65, 0x6d, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x11, 0x72, 0x65, 0x6d, 0x61, 0x69, 0x6e, 0x69, 0x6e, + 0x67, 0x44, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x22, 0x3e, 0x0a, 0x0b, 0x42, 0x61, 0x6c, + 0x69, 0x73, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x2f, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, + 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x73, 0x74, 0x61, + 0x74, 0x65, 0x2e, 0x42, 0x61, 0x6c, 0x69, 0x73, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, + 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x22, 0x4d, 0x0a, 0x0d, 0x42, 0x61, 0x6c, + 0x69, 0x73, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, + 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x18, + 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, + 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x22, 0x6e, 0x0a, 0x14, 0x4f, 0x63, 0x63, 0x75, + 0x70, 0x69, 0x65, 0x64, 0x4c, 0x69, 0x6e, 0x6b, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0x16, 0x0a, 0x06, 0x6c, 0x69, 0x6e, 0x6b, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x06, 0x6c, 0x69, 0x6e, 0x6b, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x73, 0x74, 0x61, 0x72, + 0x74, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x73, + 0x74, 0x61, 0x72, 0x74, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x65, 0x6e, + 0x64, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x65, + 0x6e, 0x64, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x89, 0x01, 0x0a, 0x0a, 0x54, 0x72, 0x61, + 0x69, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x37, 0x0a, 0x0a, 0x61, 0x63, 0x74, 0x69, 0x76, + 0x65, 0x48, 0x65, 0x61, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x17, 0x2e, 0x63, 0x73, + 0x74, 0x61, 0x74, 0x65, 0x2e, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, + 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x0a, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x48, 0x65, 0x61, 0x64, + 0x12, 0x42, 0x0a, 0x0d, 0x6f, 0x63, 0x63, 0x75, 0x70, 0x69, 0x65, 0x64, 0x4c, 0x69, 0x6e, 0x6b, + 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x63, 0x73, 0x74, 0x61, 0x74, 0x65, + 0x2e, 0x4f, 0x63, 0x63, 0x75, 0x70, 0x69, 0x65, 0x64, 0x4c, 0x69, 0x6e, 0x6b, 0x50, 0x6f, 0x73, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0d, 0x6f, 0x63, 0x63, 0x75, 0x70, 0x69, 0x65, 0x64, 0x4c, + 0x69, 0x6e, 0x6b, 0x73, 0x22, 0x2b, 0x0a, 0x0b, 0x42, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x53, 0x74, + 0x61, 0x74, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x72, 0x65, 0x73, 0x73, 0x44, 0x6f, 0x77, 0x6e, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x70, 0x72, 0x65, 0x73, 0x73, 0x44, 0x6f, 0x77, + 0x6e, 0x22, 0x84, 0x01, 0x0a, 0x14, 0x42, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x73, + 0x73, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, + 0x61, 0x72, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, + 0x12, 0x12, 0x0a, 0x04, 0x64, 0x6f, 0x77, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, + 0x64, 0x6f, 0x77, 0x6e, 0x12, 0x20, 0x0a, 0x0b, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x65, 0x54, + 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x6f, 0x70, 0x65, 0x72, 0x61, + 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x6e, 0x65, 0x65, 0x64, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x6e, 0x65, 0x65, + 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x22, 0x4a, 0x0a, 0x16, 0x42, 0x75, 0x74, 0x74, + 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, + 0x6e, 0x67, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x12, 0x16, 0x0a, 0x06, + 0x63, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x63, 0x61, + 0x6e, 0x63, 0x65, 0x6c, 0x2a, 0x68, 0x0a, 0x0a, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, + 0x70, 0x65, 0x12, 0x07, 0x0a, 0x03, 0x41, 0x6e, 0x79, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x4c, + 0x69, 0x6e, 0x6b, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x10, + 0x02, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x10, 0x03, 0x12, 0x07, 0x0a, + 0x03, 0x50, 0x73, 0x64, 0x10, 0x04, 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x73, 0x64, 0x43, 0x65, 0x6c, + 0x6c, 0x10, 0x05, 0x12, 0x0d, 0x0a, 0x09, 0x41, 0x78, 0x6c, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, + 0x10, 0x06, 0x12, 0x0a, 0x0a, 0x06, 0x42, 0x61, 0x6c, 0x69, 0x73, 0x65, 0x10, 0x07, 0x2a, 0x81, + 0x01, 0x0a, 0x0c, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x41, 0x73, 0x70, 0x65, 0x63, 0x74, 0x12, + 0x06, 0x0a, 0x02, 0x4e, 0x6f, 0x10, 0x00, 0x12, 0x05, 0x0a, 0x01, 0x52, 0x10, 0x01, 0x12, 0x05, + 0x0a, 0x01, 0x47, 0x10, 0x02, 0x12, 0x05, 0x0a, 0x01, 0x59, 0x10, 0x03, 0x12, 0x05, 0x0a, 0x01, + 0x57, 0x10, 0x04, 0x12, 0x05, 0x0a, 0x01, 0x42, 0x10, 0x05, 0x12, 0x06, 0x0a, 0x02, 0x52, 0x59, + 0x10, 0x06, 0x12, 0x06, 0x0a, 0x02, 0x52, 0x57, 0x10, 0x07, 0x12, 0x06, 0x0a, 0x02, 0x47, 0x47, + 0x10, 0x08, 0x12, 0x06, 0x0a, 0x02, 0x47, 0x59, 0x10, 0x09, 0x12, 0x06, 0x0a, 0x02, 0x59, 0x59, + 0x10, 0x0a, 0x12, 0x06, 0x0a, 0x02, 0x52, 0x46, 0x10, 0x0b, 0x12, 0x06, 0x0a, 0x02, 0x59, 0x46, + 0x10, 0x0c, 0x12, 0x06, 0x0a, 0x02, 0x47, 0x46, 0x10, 0x0d, 0x12, 0x06, 0x0a, 0x02, 0x57, 0x46, + 0x10, 0x0e, 0x2a, 0x35, 0x0a, 0x0f, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x41, 0x63, 0x74, 0x69, 0x76, + 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x0a, 0x0a, 0x06, 0x48, 0x45, 0x41, 0x44, 0x5f, 0x4e, 0x10, + 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x48, 0x45, 0x41, 0x44, 0x5f, 0x41, 0x10, 0x01, 0x12, 0x0a, 0x0a, + 0x06, 0x48, 0x45, 0x41, 0x44, 0x5f, 0x42, 0x10, 0x02, 0x42, 0x0a, 0x5a, 0x08, 0x2e, 0x2f, 0x63, + 0x73, 0x74, 0x61, 0x74, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -1289,31 +1289,31 @@ func file_status_proto_rawDescGZIP() []byte { var file_status_proto_enumTypes = make([]protoimpl.EnumInfo, 3) var file_status_proto_msgTypes = make([]protoimpl.MessageInfo, 15) var file_status_proto_goTypes = []interface{}{ - (DeviceType)(0), // 0: state.DeviceType - (SignalAspect)(0), // 1: state.SignalAspect - (TrainActiveEnum)(0), // 2: state.TrainActiveEnum - (*DeviceIdentity)(nil), // 3: state.DeviceIdentity - (*SwitchRelayState)(nil), // 4: state.SwitchRelayState - (*PhysicalSectionState)(nil), // 5: state.PhysicalSectionState - (*SignalState)(nil), // 6: state.SignalState - (*SignalDisplayOperating)(nil), // 7: state.SignalDisplayOperating - (*PsdState)(nil), // 8: state.PsdState - (*PercentageDeviceState)(nil), // 9: state.PercentageDeviceState - (*PercentageDeviceOperating)(nil), // 10: state.PercentageDeviceOperating - (*BaliseState)(nil), // 11: state.BaliseState - (*BaliseContent)(nil), // 12: state.BaliseContent - (*OccupiedLinkPosition)(nil), // 13: state.OccupiedLinkPosition - (*TrainState)(nil), // 14: state.TrainState - (*ButtonState)(nil), // 15: state.ButtonState - (*ButtonPressOperating)(nil), // 16: state.ButtonPressOperating - (*ButtonConfirmOperating)(nil), // 17: state.ButtonConfirmOperating + (DeviceType)(0), // 0: cstate.DeviceType + (SignalAspect)(0), // 1: cstate.SignalAspect + (TrainActiveEnum)(0), // 2: cstate.TrainActiveEnum + (*DeviceIdentity)(nil), // 3: cstate.DeviceIdentity + (*SwitchRelayState)(nil), // 4: cstate.SwitchRelayState + (*PhysicalSectionState)(nil), // 5: cstate.PhysicalSectionState + (*SignalState)(nil), // 6: cstate.SignalState + (*SignalDisplayOperating)(nil), // 7: cstate.SignalDisplayOperating + (*PsdState)(nil), // 8: cstate.PsdState + (*PercentageDeviceState)(nil), // 9: cstate.PercentageDeviceState + (*PercentageDeviceOperating)(nil), // 10: cstate.PercentageDeviceOperating + (*BaliseState)(nil), // 11: cstate.BaliseState + (*BaliseContent)(nil), // 12: cstate.BaliseContent + (*OccupiedLinkPosition)(nil), // 13: cstate.OccupiedLinkPosition + (*TrainState)(nil), // 14: cstate.TrainState + (*ButtonState)(nil), // 15: cstate.ButtonState + (*ButtonPressOperating)(nil), // 16: cstate.ButtonPressOperating + (*ButtonConfirmOperating)(nil), // 17: cstate.ButtonConfirmOperating } var file_status_proto_depIdxs = []int32{ - 1, // 0: state.SignalState.display:type_name -> state.SignalAspect - 1, // 1: state.SignalDisplayOperating.targetAspect:type_name -> state.SignalAspect - 12, // 2: state.BaliseState.content:type_name -> state.BaliseContent - 2, // 3: state.TrainState.activeHead:type_name -> state.TrainActiveEnum - 13, // 4: state.TrainState.occupiedLinks:type_name -> state.OccupiedLinkPosition + 1, // 0: cstate.SignalState.display:type_name -> cstate.SignalAspect + 1, // 1: cstate.SignalDisplayOperating.targetAspect:type_name -> cstate.SignalAspect + 12, // 2: cstate.BaliseState.content:type_name -> cstate.BaliseContent + 2, // 3: cstate.TrainState.activeHead:type_name -> cstate.TrainActiveEnum + 13, // 4: cstate.TrainState.occupiedLinks:type_name -> cstate.OccupiedLinkPosition 5, // [5:5] is the sub-list for method output_type 5, // [5:5] is the sub-list for method input_type 5, // [5:5] is the sub-list for extension type_name diff --git a/state/system_state.go b/cstate/system_state.go similarity index 98% rename from state/system_state.go rename to cstate/system_state.go index 51ba140..eb06b53 100644 --- a/state/system_state.go +++ b/cstate/system_state.go @@ -1,4 +1,4 @@ -package state +package cstate import ( "time" diff --git a/examples/main.go b/examples/main.go index b6c1549..7e5f5a4 100644 --- a/examples/main.go +++ b/examples/main.go @@ -6,18 +6,19 @@ import ( "joylink.club/ecs" "joylink.club/rtsssimulation/components" + "joylink.club/rtsssimulation/cstate" "joylink.club/rtsssimulation/memory" + "joylink.club/rtsssimulation/memory/wdcreator" "joylink.club/rtsssimulation/model" - "joylink.club/rtsssimulation/state" "joylink.club/rtsssimulation/system" ) func testModel() { link1 := model.NewLinkModel("link1") link2 := model.NewLinkModel("link2") - memory.AddModel(link1) - memory.AddModel(link2) - memory.ForEachModelsByType(state.DeviceType_Link, func(md memory.ModelData) { + memory.DeviceModelStorage.AddModel(link1) + memory.DeviceModelStorage.AddModel(link2) + memory.DeviceModelStorage.ForEachModelsByType(cstate.DeviceType_Link, func(md memory.ModelData) { link := md.(*model.LinkModel) fmt.Println("==>>", link.Id) }) @@ -26,7 +27,7 @@ func main() { world := ecs.NewWorld(300) worlTime := time.Now() //外界与world交互的门面 - face := memory.InitializeWorld(world, worlTime) + face := wdcreator.InitializeWorld(world, worlTime) // initDevicesStatus(world) // @@ -86,31 +87,31 @@ func testSwitchTurn(world ecs.World, face *system.FaceSystem) { } func testSignalOpt(world ecs.World, face *system.FaceSystem) { face.Call(func(w ecs.World) any { - return system.SetSignalDisplay(w, "siganl1", state.SignalAspect_B) + return system.SetSignalDisplay(w, "siganl1", cstate.SignalAspect_B) }) } // //////////////////////////////////////////////////////////////////////// func initDevicesStatus(world ecs.World) { //当组件未显式set值时,world会初始化组件的零值 - switch1Entry := memory.CreateSwitchEntity(world) - components.DeviceIdentityComponent.Set(switch1Entry, &state.DeviceIdentity{Id: "switch1"}) - components.SwitchRelayStateComponent.Set(switch1Entry, &state.SwitchRelayState{DcJ: false, FcJ: false, DbJ: true, FbJ: false}) - components.PercentageDeviceComponent.Set(switch1Entry, &state.PercentageDeviceState{Rate: system.SwitchNormalRate}) + switch1Entry := wdcreator.CreateSwitchEntity(world) + components.DeviceIdentityComponent.Set(switch1Entry, &cstate.DeviceIdentity{Id: "switch1"}) + components.SwitchRelayStateComponent.Set(switch1Entry, &cstate.SwitchRelayState{DcJ: false, FcJ: false, DbJ: true, FbJ: false}) + components.PercentageDeviceComponent.Set(switch1Entry, &cstate.PercentageDeviceState{Rate: system.SwitchNormalRate}) // - signal1Entry := memory.CreateSignalEntity(world) - components.DeviceIdentityComponent.Set(signal1Entry, &state.DeviceIdentity{Id: "siganl1"}) - components.SignalStateComponent.Set(signal1Entry, &state.SignalState{Display: state.SignalAspect_No}) + signal1Entry := wdcreator.CreateSignalEntity(world) + components.DeviceIdentityComponent.Set(signal1Entry, &cstate.DeviceIdentity{Id: "siganl1"}) + components.SignalStateComponent.Set(signal1Entry, &cstate.SignalState{Display: cstate.SignalAspect_No}) //psd1两个cell - psd1Entry := memory.CreatePsdEntity(world) - components.DeviceIdentityComponent.Set(psd1Entry, &state.DeviceIdentity{Id: "psd1"}) - components.PsdStateComponent.Set(psd1Entry, &state.PsdState{AllClosed: true, AllOpened: false, InterlockReleased: false}) - psd1Cell1Entry := memory.CreatePsdCellEntity(world, psd1Entry) - components.DeviceIdentityComponent.Set(psd1Cell1Entry, &state.DeviceIdentity{Id: "psd1Cell1"}) - components.PercentageDeviceComponent.Set(psd1Cell1Entry, &state.PercentageDeviceState{Rate: system.PsdCellWholeCloseRate}) - psd1Cell2Entry := memory.CreatePsdCellEntity(world, psd1Entry) - components.DeviceIdentityComponent.Set(psd1Cell2Entry, &state.DeviceIdentity{Id: "psd1Cell2"}) - components.PercentageDeviceComponent.Set(psd1Cell2Entry, &state.PercentageDeviceState{Rate: system.PsdCellWholeCloseRate}) + psd1Entry := wdcreator.CreatePsdEntity(world) + components.DeviceIdentityComponent.Set(psd1Entry, &cstate.DeviceIdentity{Id: "psd1"}) + components.PsdStateComponent.Set(psd1Entry, &cstate.PsdState{AllClosed: true, AllOpened: false, InterlockReleased: false}) + psd1Cell1Entry := wdcreator.CreatePsdCellEntity(world, psd1Entry) + components.DeviceIdentityComponent.Set(psd1Cell1Entry, &cstate.DeviceIdentity{Id: "psd1Cell1"}) + components.PercentageDeviceComponent.Set(psd1Cell1Entry, &cstate.PercentageDeviceState{Rate: system.PsdCellWholeCloseRate}) + psd1Cell2Entry := wdcreator.CreatePsdCellEntity(world, psd1Entry) + components.DeviceIdentityComponent.Set(psd1Cell2Entry, &cstate.DeviceIdentity{Id: "psd1Cell2"}) + components.PercentageDeviceComponent.Set(psd1Cell2Entry, &cstate.PercentageDeviceState{Rate: system.PsdCellWholeCloseRate}) } func initSystems(world ecs.World) { diff --git a/memory/model_manage.go b/memory/model_manage.go index 6ebd2a9..736b51d 100644 --- a/memory/model_manage.go +++ b/memory/model_manage.go @@ -3,47 +3,51 @@ package memory import ( "fmt" - "joylink.club/rtsssimulation/model" - "joylink.club/rtsssimulation/state" + "joylink.club/rtsssimulation/cstate" + "joylink.club/rtsssimulation/umi" ) // 仿真模型数据定义 -type ModelData = model.IDeviceModel +type ModelData = umi.IDeviceModel // 仿真模型数据仓库 // 所有仿真实例共用 -var storage *modelStorage = &modelStorage{idModelMap: make(map[string]ModelData, 2048), typeModelMap: make(map[state.DeviceType][]ModelData, 128)} +var DeviceModelStorage *ModelStorage = newModelStorage() // 模型存储、管理仓库 -type modelStorage struct { +type ModelStorage struct { //key-模型id,value-模型指针 idModelMap map[string]ModelData //key-设备类型,value-对应设备类型的所有模型数据的指针列表 - typeModelMap map[state.DeviceType][]ModelData + typeModelMap map[cstate.DeviceType][]ModelData +} + +func newModelStorage() *ModelStorage { + return &ModelStorage{idModelMap: make(map[string]ModelData, 2048), typeModelMap: make(map[cstate.DeviceType][]ModelData, 128)} } // 添加模型数据 // m 为具体模型数据的指针 -func AddModel(m ModelData) error { - _, ok := storage.idModelMap[m.GetId()] +func (me *ModelStorage) AddModel(m ModelData) error { + _, ok := me.idModelMap[m.GetId()] if ok { return fmt.Errorf("模型[%s]已经存在", m.GetId()) } else { - storage.idModelMap[m.GetId()] = m + me.idModelMap[m.GetId()] = m // - _, mdOk := storage.typeModelMap[m.GetType()] + _, mdOk := me.typeModelMap[m.GetType()] if !mdOk { - storage.typeModelMap[m.GetType()] = make([]ModelData, 0, 512) + me.typeModelMap[m.GetType()] = make([]ModelData, 0, 512) } - storage.typeModelMap[m.GetType()] = append(storage.typeModelMap[m.GetType()], m) + me.typeModelMap[m.GetType()] = append(me.typeModelMap[m.GetType()], m) // return nil } } // 根据设备类型获取该类型的所有设备数据 -func FindModelsByType(deviceType state.DeviceType) []ModelData { - models, ok := storage.typeModelMap[deviceType] +func (me *ModelStorage) FindModelsByType(deviceType cstate.DeviceType) []ModelData { + models, ok := me.typeModelMap[deviceType] if ok { return models } else { @@ -53,8 +57,8 @@ func FindModelsByType(deviceType state.DeviceType) []ModelData { // 根据设备id获取对应模型数据 // 如果不存在返回nil -func FindModelById(id string) ModelData { - md, ok := storage.idModelMap[id] +func (me *ModelStorage) FindModelById(id string) ModelData { + md, ok := me.idModelMap[id] if ok { return md } else { @@ -63,23 +67,23 @@ func FindModelById(id string) ModelData { } // 遍历某个类型的所有设备 -func ForEachModelsByType(deviceType state.DeviceType, callback func(md ModelData)) { - mds := FindModelsByType(deviceType) +func (me *ModelStorage) ForEachModelsByType(deviceType cstate.DeviceType, callback func(md ModelData)) { + mds := me.FindModelsByType(deviceType) for _, modelData := range mds { callback(modelData) } } // 根据id检测设备模型数据是否存在 -func HasModelById(id string) bool { - _, ok := storage.idModelMap[id] +func (me *ModelStorage) HasModelById(id string) bool { + _, ok := me.idModelMap[id] return ok } // 获取当前模型数据总数量 -func AmountOfModels() int { - return len(storage.idModelMap) +func (me *ModelStorage) AmountOfModels() int { + return len(me.idModelMap) } -func AmountOfDeviceTypes() int { - return len(storage.typeModelMap) +func (me *ModelStorage) AmountOfDeviceTypes() int { + return len(me.typeModelMap) } diff --git a/memory/status_manage.go b/memory/status_manage.go index 9ce9e82..82d8d15 100644 --- a/memory/status_manage.go +++ b/memory/status_manage.go @@ -3,7 +3,7 @@ package memory import ( "joylink.club/ecs" "joylink.club/rtsssimulation/components" - "joylink.club/rtsssimulation/state" + "joylink.club/rtsssimulation/cstate" ) //收集实体组件状态生成设备状态 @@ -24,6 +24,7 @@ type StateCompareMethod func(preState DeviceState, curState DeviceState) bool // 设备状态仓库定义 type StatusStorage struct { + modelStorage *ModelStorage //当前状态 //key-设备id,value-状态数据指针 idCurStateMap map[string]DeviceState @@ -31,44 +32,51 @@ type StatusStorage struct { //key-设备id,value-状态数据指针 idPreStateMap map[string]DeviceState //设备类型到设备实体转换为设备状态的方法的映射 - entityToStateMethodMap map[state.DeviceType]*EntityToStateMethod + entityToStateMethodMap map[cstate.DeviceType]*EntityToStateMethod //生成对应类型设备的状态的副本的方法的映射 - stateCopyMethodMap map[state.DeviceType]*StateCopyMethod + stateCopyMethodMap map[cstate.DeviceType]*StateCopyMethod //当前时刻设备状态与前一刻设备状态比较的方法映射 - stateCompareMethodMap map[state.DeviceType]*StateCompareMethod + stateCompareMethodMap map[cstate.DeviceType]*StateCompareMethod } func NewStatusStorage() *StatusStorage { - modelsAmount := AmountOfModels() - typesAmount := AmountOfDeviceTypes() + dms := DeviceModelStorage + modelsAmount := dms.AmountOfModels() + typesAmount := dms.AmountOfDeviceTypes() return &StatusStorage{ + modelStorage: dms, idCurStateMap: make(map[string]DeviceState, modelsAmount), idPreStateMap: make(map[string]DeviceState, modelsAmount), - entityToStateMethodMap: make(map[state.DeviceType]*EntityToStateMethod, typesAmount), - stateCopyMethodMap: make(map[state.DeviceType]*StateCopyMethod, typesAmount), - stateCompareMethodMap: make(map[state.DeviceType]*StateCompareMethod, typesAmount), + entityToStateMethodMap: make(map[cstate.DeviceType]*EntityToStateMethod, typesAmount), + stateCopyMethodMap: make(map[cstate.DeviceType]*StateCopyMethod, typesAmount), + stateCompareMethodMap: make(map[cstate.DeviceType]*StateCompareMethod, typesAmount), } } // 从实体运行时生成对应设备状态 func (me *StatusStorage) AddStateFromEntity(entry *ecs.Entry) { id := components.DeviceIdentityComponent.Get(entry).Id - deviceModel := FindModelById(id) + deviceModel := me.modelStorage.FindModelById(id) deviceState := (*me.entityToStateMethodMap[deviceModel.GetType()])(entry) me.idCurStateMap[id] = deviceState } // 添加从设备实体生成状态的方法 -func (me *StatusStorage) InitEntityToStateMethod(deviceType state.DeviceType, method *EntityToStateMethod) { +func (me *StatusStorage) InitEntityToStateMethod(deviceType cstate.DeviceType, method *EntityToStateMethod) { me.entityToStateMethodMap[deviceType] = method } // 添加生成对应类型设备的状态的副本的方法 -func (me *StatusStorage) InitStateCopyMethod(deviceType state.DeviceType, method *StateCopyMethod) { +func (me *StatusStorage) InitStateCopyMethod(deviceType cstate.DeviceType, method *StateCopyMethod) { me.stateCopyMethodMap[deviceType] = method } // 添加当前时刻设备状态与前一刻设备状态比较的方法 -func (me *StatusStorage) InitStateCompareMethod(deviceType state.DeviceType, method *StateCompareMethod) { +func (me *StatusStorage) InitStateCompareMethod(deviceType cstate.DeviceType, method *StateCompareMethod) { me.stateCompareMethodMap[deviceType] = method } + +// 获取模型仓库 +func (me *StatusStorage) ModelStorage() *ModelStorage { + return me.modelStorage +} diff --git a/memory/init_world.go b/memory/wdcreator/init_world.go similarity index 88% rename from memory/init_world.go rename to memory/wdcreator/init_world.go index aa30f9d..bffeaee 100644 --- a/memory/init_world.go +++ b/memory/wdcreator/init_world.go @@ -1,11 +1,11 @@ -package memory +package wdcreator import ( "time" "joylink.club/ecs" "joylink.club/rtsssimulation/components" - "joylink.club/rtsssimulation/state" + "joylink.club/rtsssimulation/cstate" "joylink.club/rtsssimulation/system" ) @@ -13,7 +13,7 @@ import ( func InitializeWorld(w ecs.World, worldTime time.Time) *system.FaceSystem { //初始化world时钟 timeEntry := w.Create(components.SystemTimerComponent) - components.SystemTimerComponent.Set(timeEntry, state.NewSystemTimer(&worldTime)) + components.SystemTimerComponent.Set(timeEntry, cstate.NewSystemTimer(&worldTime)) w.AddSystem(system.NewTimerSystem()) //初始化world与外界交互的门面 faceSystem := system.NewFaceSystem(w) @@ -44,7 +44,7 @@ func CreatePhysicalSectionEntity(w ecs.World) *ecs.Entry { // 创建站台单侧屏蔽门实体 func CreatePsdEntity(w ecs.World) *ecs.Entry { e := w.Create(components.DeviceIdentityComponent, components.PsdStateComponent, components.EntityTagHandlerComponent) - components.EntityTagHandlerComponent.Set(e, &state.EntityTagHandler{Tag: ecs.NewComponentType[struct{}]()}) + components.EntityTagHandlerComponent.Set(e, &cstate.EntityTagHandler{Tag: ecs.NewComponentType[struct{}]()}) return e } diff --git a/model/axle_model.go b/model/axle_model.go index cc1b7b4..13bbd8f 100644 --- a/model/axle_model.go +++ b/model/axle_model.go @@ -1,6 +1,6 @@ package model -import "joylink.club/rtsssimulation/state" +import "joylink.club/rtsssimulation/cstate" //计轴检测点模型 type AxlePointModel struct { @@ -10,5 +10,5 @@ type AxlePointModel struct { } func NewAxlePointModel(id string) *AxlePointModel { - return &AxlePointModel{DeviceModel: DeviceModel{Id: id, Type: state.DeviceType_AxlePoint}} + return &AxlePointModel{DeviceModel: DeviceModel{Id: id, Type: cstate.DeviceType_AxlePoint}} } diff --git a/model/balise_model.go b/model/balise_model.go index 3c3f0d2..2e15541 100644 --- a/model/balise_model.go +++ b/model/balise_model.go @@ -1,6 +1,6 @@ package model -import "joylink.club/rtsssimulation/state" +import "joylink.club/rtsssimulation/cstate" // 应答器 type BaliseModel struct { @@ -10,5 +10,5 @@ type BaliseModel struct { } func NewBaliseModel(id string) *BaliseModel { - return &BaliseModel{DeviceModel: DeviceModel{Id: id, Type: state.DeviceType_Balise}} + return &BaliseModel{DeviceModel: DeviceModel{Id: id, Type: cstate.DeviceType_Balise}} } diff --git a/model/device_model.go b/model/device_model.go index 477f307..3fc4132 100644 --- a/model/device_model.go +++ b/model/device_model.go @@ -1,28 +1,25 @@ package model -import "joylink.club/rtsssimulation/state" - -type IDeviceModel interface { - GetId() string - IsSame(other IDeviceModel) bool - GetType() state.DeviceType -} +import ( + "joylink.club/rtsssimulation/cstate" + "joylink.club/rtsssimulation/umi" +) // 设备模型基础信息 type DeviceModel struct { // 设备id Id string // 设备类型 - Type state.DeviceType + Type cstate.DeviceType } func (me *DeviceModel) GetId() string { return me.Id } -func (me *DeviceModel) IsSame(other IDeviceModel) bool { +func (me *DeviceModel) IsSame(other umi.IDeviceModel) bool { return me.Id == other.GetId() } -func (me *DeviceModel) GetType() state.DeviceType { +func (me *DeviceModel) GetType() cstate.DeviceType { return me.Type } diff --git a/model/link_model.go b/model/link_model.go index f1ec1d4..d3af657 100644 --- a/model/link_model.go +++ b/model/link_model.go @@ -1,6 +1,6 @@ package model -import "joylink.club/rtsssimulation/state" +import "joylink.club/rtsssimulation/cstate" //长轨道,道岔端点间的轨道 type LinkModel struct { @@ -12,7 +12,7 @@ type LinkModel struct { } func NewLinkModel(id string) *LinkModel { - return &LinkModel{DeviceModel: DeviceModel{Id: id, Type: state.DeviceType_Link}} + return &LinkModel{DeviceModel: DeviceModel{Id: id, Type: cstate.DeviceType_Link}} } //轨道端口引用 diff --git a/model/psd_model.go b/model/psd_model.go index bcde579..9376356 100644 --- a/model/psd_model.go +++ b/model/psd_model.go @@ -1,33 +1,41 @@ package model -import "joylink.club/rtsssimulation/state" +import ( + "joylink.club/rtsssimulation/cstate" + "joylink.club/rtsssimulation/umi" +) -//站台一侧屏蔽门模型 +// 站台一侧屏蔽门模型 type PsdModel struct { DeviceModel //屏蔽门所包含的单元 Cells []*PsdCellModel + //屏蔽门移动从0-100耗时,单位ms + MoveTime int64 } func NewPsdModel(id string) *PsdModel { - return &PsdModel{DeviceModel: DeviceModel{Id: id, Type: state.DeviceType_Psd}, Cells: make([]*PsdCellModel, 0)} + return &PsdModel{DeviceModel: DeviceModel{Id: id, Type: cstate.DeviceType_Psd}, Cells: make([]*PsdCellModel, 0)} } func (me *PsdModel) AddCell(cell *PsdCellModel) { me.Cells = append(me.Cells, cell) } +func (me *PsdModel) MovingTime() int64 { + return me.MoveTime +} ///////////////////////////////////////////// -//站台一侧屏蔽门单元模型 +// 站台一侧屏蔽门单元模型 type PsdCellModel struct { DeviceModel //该屏蔽门单元所属的屏蔽门 - psd IDeviceModel + psd umi.IDeviceModel } func NewPsdCellModel(id string, psdModel *PsdModel) *PsdCellModel { return &PsdCellModel{ - DeviceModel: DeviceModel{Id: id, Type: state.DeviceType_PsdCell}, + DeviceModel: DeviceModel{Id: id, Type: cstate.DeviceType_PsdCell}, psd: psdModel, } } diff --git a/model/signal_model.go b/model/signal_model.go index bbb1e62..f5a5a6b 100644 --- a/model/signal_model.go +++ b/model/signal_model.go @@ -1,6 +1,6 @@ package model -import "joylink.club/rtsssimulation/state" +import "joylink.club/rtsssimulation/cstate" // 信号机 type SignalModel struct { @@ -8,11 +8,11 @@ type SignalModel struct { //信号机所在轨道 LinkOffset *LinkOffsetRef //信号机类型,出厂已确定,即几个色灯、排列顺序 - Type state.SignalAspect + Type cstate.SignalAspect //默认显示信号 - DefaultDisplay state.SignalAspect + DefaultDisplay cstate.SignalAspect } func NewSignalModel(id string) *SignalModel { - return &SignalModel{DeviceModel: DeviceModel{Id: id, Type: state.DeviceType_Signal}} + return &SignalModel{DeviceModel: DeviceModel{Id: id, Type: cstate.DeviceType_Signal}} } diff --git a/model/switch_model.go b/model/switch_model.go index ac1793a..00eb982 100644 --- a/model/switch_model.go +++ b/model/switch_model.go @@ -1,6 +1,6 @@ package model -import "joylink.club/rtsssimulation/state" +import "joylink.club/rtsssimulation/cstate" //道岔 type SwitchModel struct { @@ -15,6 +15,10 @@ type SwitchModel struct { TurnTime int64 } +func (me *SwitchModel) TurningTime() int64 { + return me.TurnTime +} + //道岔端口引用 type SwitchPortRef struct { Switch *SwitchModel @@ -23,5 +27,5 @@ type SwitchPortRef struct { } func NewSwitchModel(id string) *SwitchModel { - return &SwitchModel{DeviceModel: DeviceModel{Id: id, Type: state.DeviceType_Switch}} + return &SwitchModel{DeviceModel: DeviceModel{Id: id, Type: cstate.DeviceType_Switch}} } diff --git a/proto/src/status.proto b/proto/src/status.proto index 582bca0..9efa842 100644 --- a/proto/src/status.proto +++ b/proto/src/status.proto @@ -1,6 +1,8 @@ syntax = "proto3"; -package state; -option go_package = "./state"; +package cstate; +option go_package = "./cstate"; + +//仿真底层ecs组件相关定义 //设备身份信息 message DeviceIdentity{ diff --git a/system/balise_system.go b/system/balise_system.go index a7d10e7..fa6da8b 100644 --- a/system/balise_system.go +++ b/system/balise_system.go @@ -4,7 +4,7 @@ import ( "github.com/yohamta/donburi/filter" "joylink.club/ecs" "joylink.club/rtsssimulation/components" - "joylink.club/rtsssimulation/state" + "joylink.club/rtsssimulation/cstate" ) // 应答器查询 @@ -30,7 +30,7 @@ func (me *BaliseSystem) Update(w ecs.World) { // 发送消息到应答器 // 当要清空应答器中报文时,则message=nil -func SendMessageToTransponder(world ecs.World, transponderId string, message *state.BaliseContent) bool { +func SendMessageToTransponder(world ecs.World, transponderId string, message *cstate.BaliseContent) bool { var transponderEntry *ecs.Entry = nil baliseQuery.Each(world, func(e *ecs.Entry) { if transponderId == components.DeviceIdentityComponent.Get(e).Id { diff --git a/system/percentage_system.go b/system/percentage_system.go index 010ac8d..a934c54 100644 --- a/system/percentage_system.go +++ b/system/percentage_system.go @@ -6,7 +6,7 @@ import ( "github.com/yohamta/donburi/filter" "joylink.club/ecs" "joylink.club/rtsssimulation/components" - "joylink.club/rtsssimulation/state" + "joylink.club/rtsssimulation/cstate" ) // 百分比设备系统 @@ -70,7 +70,7 @@ func FirePercentageDeviceOperation(w ecs.World, deviceEntry *ecs.Entry, lhDistan sumDistance = int64(float64(lhDistance) * (float64(curRate-toRate) / float64(100))) } // - *operation = state.PercentageDeviceOperating{ + *operation = cstate.PercentageDeviceOperating{ ToH: toHigh, LhDistance: lhDistance, InitDistance: initDistance, diff --git a/system/psd_system.go b/system/psd_system.go index dea2d04..0da75dc 100644 --- a/system/psd_system.go +++ b/system/psd_system.go @@ -6,7 +6,9 @@ import ( "github.com/yohamta/donburi/filter" "joylink.club/ecs" "joylink.club/rtsssimulation/components" - "joylink.club/rtsssimulation/state" + "joylink.club/rtsssimulation/cstate" + "joylink.club/rtsssimulation/memory" + "joylink.club/rtsssimulation/umi" ) var psdQuery = ecs.NewQuery(filter.Contains(components.DeviceIdentityComponent, components.PsdStateComponent, components.EntityTagHandlerComponent)) @@ -19,11 +21,11 @@ const ( ) type PsdSystem struct { - cellsQuery map[state.EntityTag]*ecs.Query + cellsQuery map[cstate.EntityTag]*ecs.Query } func NewPsdSystem() *PsdSystem { - return &PsdSystem{cellsQuery: make(map[state.EntityTag]*ecs.Query)} + return &PsdSystem{cellsQuery: make(map[cstate.EntityTag]*ecs.Query)} } // world 执行 @@ -129,5 +131,11 @@ func findPsdEntry(world ecs.World, psdId string) (*ecs.Entry, error) { // 获取屏蔽门从完全开到完全关所需时间,单位ms func findPsdWholeMoveTime(psdId string) int64 { + psd := memory.DeviceModelStorage.FindModelById(psdId) + if nil != psd { + psdUmi := psd.(umi.IPsdModel) + return psdUmi.MovingTime() + } + //默认值 return 4000 } diff --git a/system/signal_system.go b/system/signal_system.go index d2f361b..cb83690 100644 --- a/system/signal_system.go +++ b/system/signal_system.go @@ -6,7 +6,7 @@ import ( "github.com/yohamta/donburi/filter" "joylink.club/ecs" "joylink.club/rtsssimulation/components" - "joylink.club/rtsssimulation/state" + "joylink.club/rtsssimulation/cstate" ) type SignalSystem struct { @@ -25,7 +25,7 @@ func NewSignalSystem() *SignalSystem { // 设置某个信号机的显示 // 返回值:true-设置成功,false-设置失败 -func SetSignalDisplay(w ecs.World, signalId string, display state.SignalAspect) error { +func SetSignalDisplay(w ecs.World, signalId string, display cstate.SignalAspect) error { signalEntry, err := findSignalEntry(w, signalId) if err != nil { return err diff --git a/system/switch_system.go b/system/switch_system.go index b73c405..edc1d3d 100644 --- a/system/switch_system.go +++ b/system/switch_system.go @@ -6,6 +6,8 @@ import ( "github.com/yohamta/donburi/filter" "joylink.club/ecs" "joylink.club/rtsssimulation/components" + "joylink.club/rtsssimulation/memory" + "joylink.club/rtsssimulation/umi" ) var switchQuery *ecs.Query = ecs.NewQuery(filter.Contains(components.DeviceIdentityComponent, components.SwitchRelayStateComponent, components.PercentageDeviceComponent)) @@ -83,5 +85,11 @@ func (me *SwitchSystem) Update(w ecs.World) { // 获取道岔转动耗时ms func getSwitchTurnTime(switchId string) int64 { + dcModel := memory.DeviceModelStorage.FindModelById(switchId) + if nil != dcModel { + var dc umi.ISwitchModel = dcModel.(umi.ISwitchModel) + return dc.TurningTime() + } + //不存在返回默认值 return 5000 } diff --git a/umi/model_umi.go b/umi/model_umi.go new file mode 100644 index 0000000..886b07b --- /dev/null +++ b/umi/model_umi.go @@ -0,0 +1,27 @@ +package umi + +import "joylink.club/rtsssimulation/cstate" + +// 用户设备模型与仿真底层设备交互定义 + +// 仿真底层设备模型定义 +// 用户所有设备模型定义须实现该接口 +type IDeviceModel interface { + GetId() string + IsSame(other IDeviceModel) bool + GetType() cstate.DeviceType +} + +// 仿真底层道岔模型 +// 用户所有道岔模型定义须实现该接口 +type ISwitchModel interface { + //道岔转动从0-100耗时,单位ms + TurningTime() int64 +} + +// 仿真底层屏蔽门模型 +// 用户所有屏蔽门模型定义须实现该接口 +type IPsdModel interface { + //屏蔽门移动从0-100耗时,单位ms + MovingTime() int64 +}