71 lines
2.0 KiB
Go
71 lines
2.0 KiB
Go
package memory
|
||
|
||
import (
|
||
"sync"
|
||
)
|
||
|
||
///////////////////////////////////////////////////////////////////////////
|
||
|
||
// 轨旁仿真模型状态
|
||
type VerifyStatus struct {
|
||
//道岔状态,key为道岔id即索引 state.SwitchState
|
||
SwitchStateMap sync.Map
|
||
//轨道状态,key为轨道id即索引 state.LinkState
|
||
LinkStateMap sync.Map
|
||
//列车状态,key为列车id即索引 state.TrainState
|
||
TrainStateMap sync.Map
|
||
//计轴区段状态,key为计轴区段的id即索引 state.SectionState
|
||
AxleSectionStateMap sync.Map
|
||
//物理区段状态,key为物理区段id即索引 state.SectionState
|
||
PhysicalSectionStateMap sync.Map
|
||
//逻辑区段状态,key为逻辑区段id即索引 state.SectionState
|
||
LogicSectionStateMap sync.Map
|
||
//信号机状态,key为信号机id,即索引 state.SignalState
|
||
SignalStateMap sync.Map
|
||
//vobc发来的列车状态,索引为列车id
|
||
VobcTrainStateMap sync.Map
|
||
}
|
||
|
||
// 轨旁仿真模型状态(变更)
|
||
type ChangeVerifyStatus struct {
|
||
VerifyStatus
|
||
//删除的列车ID列表
|
||
RemoveTrainId []string
|
||
}
|
||
|
||
//////////////////////////////////////////////////////////////////////////
|
||
|
||
// 轨旁仿真内存模型
|
||
type WaysideMemory struct {
|
||
//可变状态数据:轨旁仿真模型状态(全量数据)
|
||
Status *VerifyStatus
|
||
// 要变更的状态:用户操作过的状态记录在这里,增量推送次数据
|
||
ChangeStatus *ChangeVerifyStatus
|
||
//状态保护锁
|
||
rwLock *sync.RWMutex
|
||
}
|
||
|
||
// 初始化轨旁仿真内存模型
|
||
func (memory *WaysideMemory) Create() *WaysideMemory {
|
||
memory.Status = new(VerifyStatus)
|
||
memory.ChangeStatus = &ChangeVerifyStatus{}
|
||
memory.rwLock = new(sync.RWMutex)
|
||
return memory
|
||
}
|
||
|
||
// 状态读保护操作
|
||
func (me *WaysideMemory) SafeOptRead(opt func(memory *WaysideMemory) any) any {
|
||
me.rwLock.RLock()
|
||
defer me.rwLock.RUnlock()
|
||
var rt any = opt(me)
|
||
return rt
|
||
}
|
||
|
||
// 状态写保护操作
|
||
func (me *WaysideMemory) SafeOptWrite(opt func(memory *WaysideMemory) any) any {
|
||
me.rwLock.Lock()
|
||
defer me.rwLock.Unlock()
|
||
var rt any = opt(me)
|
||
return rt
|
||
}
|