75 lines
1.8 KiB
Go
75 lines
1.8 KiB
Go
|
package axle_device
|
||
|
|
||
|
import "joylink.club/bj-rtsts-server/third_party/message"
|
||
|
|
||
|
//计轴设备与联锁系统安全通信应用层实现
|
||
|
|
||
|
type RsspAxle interface {
|
||
|
//Start 启动计轴设备与联锁系统安全通信服务
|
||
|
Start(amm AxleMessageManager) error
|
||
|
//Stop 停止计轴设备与联锁系统安全通信服务
|
||
|
Stop()
|
||
|
//SendStatusMsg 将计轴区段状态发生给联锁系统
|
||
|
SendStatusMsg(msg *message.SectionStatusMsgPack)
|
||
|
}
|
||
|
|
||
|
type AxleMessageManager interface {
|
||
|
//HandleCmdMsg 计轴设备接收到联锁发送来的控制命令
|
||
|
HandleCmdMsg(msg *message.SectionCmdMsgPack)
|
||
|
}
|
||
|
|
||
|
type rsspAxle struct {
|
||
|
//主安全通道
|
||
|
masterRssp *RsspChannel
|
||
|
//备安全通道
|
||
|
slaveRssp *RsspChannel
|
||
|
//收到应用层消息回调
|
||
|
messageManager AxleMessageManager
|
||
|
}
|
||
|
|
||
|
func NewRsspAxle(masterRssp *RsspChannel, slaveRssp *RsspChannel) RsspAxle {
|
||
|
return &rsspAxle{masterRssp: masterRssp, slaveRssp: slaveRssp}
|
||
|
}
|
||
|
|
||
|
// rssp 安全层执行
|
||
|
func (s *rsspAxle) rcvCmdMsg(data []byte) {
|
||
|
msg := &message.SectionCmdMsgPack{}
|
||
|
msg.Decode(data)
|
||
|
s.messageManager.HandleCmdMsg(msg)
|
||
|
}
|
||
|
func (s *rsspAxle) Start(amm AxleMessageManager) error {
|
||
|
s.messageManager = amm
|
||
|
//设置安全通道层
|
||
|
if s.masterRssp != nil {
|
||
|
s.masterRssp.handleUserData = s.rcvCmdMsg
|
||
|
s.masterRssp.Start()
|
||
|
}
|
||
|
if s.slaveRssp != nil {
|
||
|
s.slaveRssp.handleUserData = s.rcvCmdMsg
|
||
|
s.slaveRssp.Start()
|
||
|
}
|
||
|
//
|
||
|
return nil
|
||
|
}
|
||
|
func (s *rsspAxle) Stop() {
|
||
|
if s.masterRssp != nil {
|
||
|
s.masterRssp.Stop()
|
||
|
}
|
||
|
if s.slaveRssp != nil {
|
||
|
s.slaveRssp.Stop()
|
||
|
}
|
||
|
}
|
||
|
func (s *rsspAxle) SendStatusMsg(msg *message.SectionStatusMsgPack) {
|
||
|
data := msg.Encode()
|
||
|
//向备通道发送
|
||
|
if s.slaveRssp != nil {
|
||
|
data_s := make([]byte, len(data))
|
||
|
copy(data_s, data)
|
||
|
s.slaveRssp.sendUserData(data_s)
|
||
|
}
|
||
|
//向主通道发送
|
||
|
if s.masterRssp != nil {
|
||
|
s.masterRssp.sendUserData(data)
|
||
|
}
|
||
|
}
|