package main import ( "lc/common/mqtt" "sync" ) var _mqttMgronce sync.Once var _mqttMgrsingle *MQTTMgr func GetMQTTMgr() *MQTTMgr { _mqttMgronce.Do(func() { _mqttMgrsingle = _newMQTTMgr() }) return _mqttMgrsingle } type MQTTMgr struct { FromCloud *MqttClient ToCloud *MqttClient } func _newMQTTMgr() *MQTTMgr { return &MQTTMgr{ FromCloud: NewMqttClient(FromMQTTConfig.Mqtt_Server, FromMQTTConfig.Mqtt_Id, FromMQTTConfig.Mqtt_User, FromMQTTConfig.Mqtt_Password, 3000, &EmptyMqttOnline{}), ToCloud: NewMqttClient(ToMQTTConfig.Mqtt_Server, ToMQTTConfig.Mqtt_Id, ToMQTTConfig.Mqtt_User, ToMQTTConfig.Mqtt_Password, 3000, &EmptyMqttOnline{}), } } func (o *MQTTMgr) Subscribe(topic string, qos mqtt.QOS, handler mqtt.MessageHandler) { o.FromCloud.Handle(topic, handler) err := o.FromCloud.Subscribe(topic, qos) if err != nil { return } } func (o *MQTTMgr) UnSubscribe(topic string) { err := o.FromCloud.Unsubscribe(topic) if err != nil { return } } func (o *MQTTMgr) Publish(topic string, payload string, qos mqtt.QOS) error { return o.ToCloud.PublishString(topic, payload, qos) } func (o *MQTTMgr) HandlerData(m mqtt.Message) { topic := m.Topic() //newTopic := strings.ReplaceAll(topic, "000000", "100000") newTopic := topic err := o.Publish(newTopic, m.PayloadString(), m.QOS()) if err != nil { return } }