package mqtt import ( "fmt" "strings" "joylink.club/bj-rtsts-server/config" ) const ( topicPrefix = "/" + config.SystemName + "/simulation/%s/" stateTopic = topicPrefix + "state" sfpTopic = topicPrefix + "sfp/%d" rccTopic = topicPrefix + "rcc/%d" pslTopic = topicPrefix + "psl/%d/%d" ibpTopic = topicPrefix + "ibp/%d/%d" ) var topicMap = map[string]string{ "state": stateTopic, "sfp": sfpTopic, "rcc": rccTopic, "psl": pslTopic, "ibp": ibpTopic, } // 检测topic是否合法 func MatchTopic(topic string) bool { topicArr := strings.Split(topic, "/") for k, v := range topicMap { result := strings.Contains(topic, "/"+k) if result { fmtArr := strings.Split(v, "/") for i, f := range fmtArr { if f == "%s" || f == "%d" { continue } else { result = topicArr[i] == f } if !result { break } } } if result { return true } } return false } // 仿真状态消息topic func GetStateTopic(simulationId string) string { return fmt.Sprintf(stateTopic, simulationId) } // 信号布置图设备状态消息topic func GetSfpTopic(simulationId string, mapId int32) string { return fmt.Sprintf(sfpTopic, simulationId, mapId) } // 继电器组合柜布置图设备状态消息topic func GetRccTopic(simulationId string, mapId int32) string { return fmt.Sprintf(rccTopic, simulationId, mapId) } // PSL设备状态消息topic func GetPslTopic(simulationId string, mapId int32, boxId uint32) string { return fmt.Sprintf(pslTopic, simulationId, mapId, boxId) } // IBP设备状态消息topic func GetIbpTopic(simulationId string, mapId int32, stationId uint32) string { return fmt.Sprintf(ibpTopic, simulationId, mapId, stationId) }