rts-sim-module/repository/electronic_component.go
2023-10-20 13:13:44 +08:00

155 lines
2.7 KiB
Go

package repository
import "joylink.club/rtsssimulation/repository/model/proto"
// 组合的电子元件
type IGroupedElectronicComponent interface {
Identity
Code() string
}
// Relay 继电器
type Relay struct {
Identity
code string
model proto.Relay_Model
}
func newRelay(id string, code string, model proto.Relay_Model) *Relay {
return &Relay{
Identity: identity{
id: id,
deviceType: proto.DeviceType_DeviceType_Relay,
},
code: code,
model: model,
}
}
func (r *Relay) Code() string {
return r.code
}
func (r *Relay) Model() proto.Relay_Model {
return r.model
}
// ElectronicComponentGroup 电子元件组合
type ElectronicComponentGroup struct {
code string
components []IGroupedElectronicComponent
}
func (r *ElectronicComponentGroup) Code() string {
return r.code
}
func (r *ElectronicComponentGroup) Components() []IGroupedElectronicComponent {
return r.components
}
// PhaseFailureProtector 断相保护器
type PhaseFailureProtector struct {
Identity
code string
}
func (dbq *PhaseFailureProtector) Code() string {
return dbq.code
}
func newPhaseFailureProtector(id string, code string) *PhaseFailureProtector {
return &PhaseFailureProtector{
Identity: identity{
id: id,
deviceType: proto.DeviceType_DeviceType_PhaseFailureProtector,
},
code: code,
}
}
// 按钮
type Button struct {
Identity
code string
buttonType proto.Button_ButtonType
hasLight bool
}
func NewButton(id string, code string, buttonType proto.Button_ButtonType) *Button {
return &Button{
Identity: identity{id, proto.DeviceType_DeviceType_Button},
code: code,
buttonType: buttonType,
}
}
func (btn *Button) Code() string {
return btn.code
}
func (btn *Button) GetBtnType() proto.Button_ButtonType {
return btn.buttonType
}
func (btn *Button) SetLight() {
btn.hasLight = true
}
func (btn *Button) HasLight() bool {
return btn.hasLight
}
// 报警器
type Alarm struct {
Identity
code string
}
func (a *Alarm) Code() string {
return a.code
}
func NewAlarm(id string, code string) *Alarm {
return &Alarm{
Identity: identity{id, proto.DeviceType_DeviceType_Alarm},
code: code,
}
}
// 指示灯
type Light struct {
Identity
code string
}
func (a *Light) Code() string {
return a.code
}
func NewLight(id string, code string) *Light {
return &Light{
Identity: identity{id, proto.DeviceType_DeviceType_Light},
code: code,
}
}
// 钥匙
type Key struct {
Identity
code string
gear int32
}
func (a *Key) Code() string {
return a.code
}
func NewKey(id string, code string, gear int32) *Key {
return &Key{
Identity: identity{id, proto.DeviceType_DeviceType_Key},
code: code,
gear: gear,
}
}