|
@@ -2,6 +2,7 @@ package config
|
|
|
|
|
|
import (
|
|
|
"cicv-data-closedloop/common/config/c_log"
|
|
|
+ "encoding/json"
|
|
|
"fmt"
|
|
|
"github.com/gorilla/websocket"
|
|
|
"net/url"
|
|
@@ -43,16 +44,44 @@ type StatusMessage struct {
|
|
|
func keepAlive() {
|
|
|
ticker := time.NewTicker(30 * time.Second)
|
|
|
defer ticker.Stop()
|
|
|
+ request := Request{
|
|
|
+ Type: "request",
|
|
|
+ UUID: "",
|
|
|
+ CommandID: "heart",
|
|
|
+ Parameter: nil,
|
|
|
+ }
|
|
|
+
|
|
|
+ requestJSON, err := json.Marshal(request)
|
|
|
+ if err != nil {
|
|
|
+ c_log.GlobalLogger.Error("保持websocket连接活跃,解析requestJSON - 失败。", err)
|
|
|
+ }
|
|
|
|
|
|
for {
|
|
|
select {
|
|
|
case <-ticker.C:
|
|
|
- if err := WsConn.WriteMessage(websocket.PingMessage, []byte{}); err != nil {
|
|
|
- c_log.GlobalLogger.Error("保持websocket连接活跃,发送ping - 失败。", err)
|
|
|
+ err := WsConn.WriteMessage(websocket.TextMessage, requestJSON)
|
|
|
+ if err != nil {
|
|
|
+ c_log.GlobalLogger.Error("保持websocket连接活跃,发送心跳请求 - 失败。", err)
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ _, msg, err := WsConn.ReadMessage()
|
|
|
+ if err != nil {
|
|
|
+ c_log.GlobalLogger.Error("保持websocket连接活跃,获取心跳响应 - 失败。", err)
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ c_log.GlobalLogger.Error("保持websocket连接活跃,发送心跳请求 - 成功。", err)
|
|
|
+ // 将响应字节解码为JSON
|
|
|
+ var responseMessage Response
|
|
|
+ err = json.Unmarshal(msg, &responseMessage)
|
|
|
+ if err != nil {
|
|
|
+ c_log.GlobalLogger.Error("保持websocket连接活跃,解析心跳响应为json - 失败。", err)
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ if responseMessage.Status != "OK" {
|
|
|
WsConn.Close()
|
|
|
c_log.GlobalLogger.Info("重试连接websocket...")
|
|
|
InitWebsocketConfig() // 重新连接
|
|
|
- return
|
|
|
+ continue
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -103,5 +132,4 @@ func InitWebsocketConfig() {
|
|
|
reconnectionInProgress = false
|
|
|
break
|
|
|
}
|
|
|
-
|
|
|
}
|