-
Notifications
You must be signed in to change notification settings - Fork 0
/
sub_mission.go
80 lines (73 loc) · 2.82 KB
/
sub_mission.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
package IOTMQTTClient
import (
"encoding/json"
"errors"
"fmt"
mqtt "github.com/eclipse/paho.mqtt.golang"
CoreLog "github.com/fotomxq/weeekj_core/v5/core/log"
IOTMQTT "github.com/fotomxq/weeekj_core/v5/iot/mqtt"
)
// SubMissionSendGroupHandle 设备组消息
// device/mission/send/group/[设备组标识码]
type SubMissionSendGroupHandle func(data IOTMQTT.ArgsPushMissionToDevice)
// SubMissionSendGroup 设备组消息
func SubMissionSendGroup(groupMark string, handle SubMissionSendGroupHandle) (token mqtt.Token, err error) {
topic := fmt.Sprint("device/mission/send/group/", groupMark)
token = mqttClient.Subscribe(topic, 0, func(client mqtt.Client, message mqtt.Message) {
var resultData IOTMQTT.ArgsPushMissionToDevice
resultByte := message.Payload()
if err := json.Unmarshal(resultByte, &resultData); err != nil {
CoreLog.MqttError("sub mqtt data json is error, ", err.Error())
return
}
//反馈数据结果
handle(resultData)
})
if token.Wait() && token.Error() != nil {
err = errors.New(fmt.Sprint("mqtt sub mission send group, ", token.Error()))
return
}
return
}
// SubMissionSendGroupCancel 取消订阅设备组消息
func SubMissionSendGroupCancel(groupMark string) (token mqtt.Token, err error) {
topic := fmt.Sprint("device/mission/send/group/", groupMark)
token = mqttClient.SubscribeCancel(topic)
if token.Wait() && token.Error() != nil {
err = errors.New(fmt.Sprint("mqtt sub mission send group cancel, ", token.Error()))
return
}
return
}
// SubMissionSendDeviceHandle 设备消息
// device/mission/send/group/[设备组标识码]/code/[设备厂商编码]
type SubMissionSendDeviceHandle func(data IOTMQTT.ArgsPushMissionToGroup)
// SubMissionSendDevice 设备任务消息
func SubMissionSendDevice(groupMark, deviceCode string, handle SubMissionSendDeviceHandle) (token mqtt.Token, err error) {
topic := fmt.Sprint("device/mission/send/group/", groupMark, "/code/", deviceCode)
token = mqttClient.Subscribe(topic, 0, func(client mqtt.Client, message mqtt.Message) {
var resultData IOTMQTT.ArgsPushMissionToGroup
resultByte := message.Payload()
if err := json.Unmarshal(resultByte, &resultData); err != nil {
CoreLog.MqttError("sub mqtt data json is error, ", err.Error())
return
}
//反馈数据结果
handle(resultData)
})
if token.Wait() && token.Error() != nil {
err = errors.New(fmt.Sprint("sub mqtt but token is error, ", token.Error()))
return
}
return
}
// SubMissionSendDeviceCancel 取消设备任务消息
func SubMissionSendDeviceCancel(groupMark, deviceCode string) (token mqtt.Token, err error) {
topic := fmt.Sprint("device/mission/send/group/", groupMark, "/code/", deviceCode)
token = mqttClient.SubscribeCancel(topic)
if token.Wait() && token.Error() != nil {
err = errors.New(fmt.Sprint("mqtt sub mission send device, ", token.Error()))
return
}
return
}