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) } }