-
Notifications
You must be signed in to change notification settings - Fork 0
/
run_connect.go
96 lines (94 loc) · 2.92 KB
/
run_connect.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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
package IOTMQTT
import (
mqtt "github.com/eclipse/paho.mqtt.golang"
BaseConfig "github.com/fotomxq/weeekj_core/v5/base/config"
CoreLog "github.com/fotomxq/weeekj_core/v5/core/log"
"time"
)
func runConnect() (b bool) {
//捕捉异常
defer func() {
if r := recover(); r != nil {
CoreLog.Error("iot device run error, ", r)
}
}()
mqttOpen := BaseConfig.GetDataBoolNoErr("MQTTOpen")
if !mqttOpen {
return
}
mqttServerURL, err := BaseConfig.GetDataString("MQTTServerURLTCP")
//绕过url为空的时候,如测试或特殊业务场景,不需要mqtt服务的
if err != nil {
CoreLog.Error("iot mqtt, get mqtt config server url, ", err)
return
}
if mqttServerURL == "" {
//CoreLog.Error("iot mqtt, get mqtt config server url, ", err)
return
}
mqttServerUsername, err := BaseConfig.GetDataString("MQTTServerUsername")
if err != nil {
CoreLog.Error("iot mqtt, get mqtt config server username, ", err)
return
}
mqttServerPassword, err := BaseConfig.GetDataString("MQTTServerPassword")
if err != nil {
CoreLog.Error("iot mqtt, get mqtt config server password, ", err)
return
}
MQTTClient.NeedDisConnectOnIsConnect = false
if err := MQTTClient.Init(mqttServerURL, mqttServerUsername, mqttServerPassword, mqttPrefix); err != nil {
if connectTryCount < 1 {
} else if connectTryCount < 5 && connectTryCount >= 1 {
time.Sleep(time.Second * 3)
} else if connectTryCount < 7 && connectTryCount >= 5 {
time.Sleep(time.Second * 5)
} else if connectTryCount < 15 && connectTryCount >= 7 {
time.Sleep(time.Second * 15)
} else if connectTryCount < 20 && connectTryCount >= 15 {
time.Sleep(time.Second * 30)
} else {
time.Sleep(time.Second * 60)
}
connectTryCount += 1
CoreLog.Error("iot mqtt, connect server, try count: ", connectTryCount, ", ", err)
runConnectLock = false
return
}
MQTTClient.Options.SetOnConnectHandler(func(client mqtt.Client) {
connectTryCount = 0
if OpenBaseMission {
if err := initSub(); err != nil {
CoreLog.Error("iot mqtt, connect init sub, ", err)
}
}
for k, _ := range subFunc {
subFunc[k]()
}
MQTTIsConnect = true
runConnectLock = false
})
if err = MQTTClient.ConnectClient(); err != nil {
if connectTryCount < 1 {
} else if connectTryCount < 5 && connectTryCount >= 1 {
time.Sleep(time.Second * 3)
} else if connectTryCount < 7 && connectTryCount >= 5 {
time.Sleep(time.Second * 30)
} else if connectTryCount < 15 && connectTryCount >= 7 {
time.Sleep(time.Minute * 5)
} else if connectTryCount < 20 && connectTryCount >= 15 {
time.Sleep(time.Minute * 30)
} else if connectTryCount < 50 && connectTryCount >= 20 {
time.Sleep(time.Hour * 1)
} else if connectTryCount < 100 && connectTryCount >= 50 {
time.Sleep(time.Hour * 6)
} else {
time.Sleep(time.Hour * 12)
}
connectTryCount += 1
CoreLog.Error("iot mqtt, connect failed, try count: ", connectTryCount, ", ", err)
runConnectLock = false
return
}
return true
}