Pārlūkot izejas kodu

处理心跳异常

luchm 4 gadi atpakaļ
vecāks
revīzija
f19e00c93c
1 mainītis faili ar 36 papildinājumiem un 7 dzēšanām
  1. 36 7
      src/dashoo.cn/genepoint_srv/main.go

+ 36 - 7
src/dashoo.cn/genepoint_srv/main.go

@@ -36,6 +36,7 @@ var err error
 var conn *websocket.Conn
 var ctrl converse.ConverseController
 var disconnect = make(chan bool)
+var cronstart=false
 
 func main() {
 	temp = false
@@ -109,10 +110,12 @@ func main() {
 				case <-time.After(time.Second * 10):
 					conn = WebSocketFound()
 					//开启计时器
-					initTimer()
+					//initTimer()
 					if conn != nil {
+						log.Println("正在重连-------")
 						defer conn.Close()
 						ctrl.GetConnection(conn)
+						//ctrl.SendMessage(nil,conn)
 						//go ListenToSendMsg(conn)
 						//go ListenToReadMsg(conn)
 						goto label
@@ -142,6 +145,7 @@ func initTimer ()  {
 	go func() {
 		<-timer.C
 		//conn.Close()
+		temp = true
 		go SetDisconnect()
 	}()
 	timer.Stop()
@@ -166,17 +170,31 @@ func WebSocketFound() *websocket.Conn {
 		err := conn.WriteControl(10, []byte(appData), time.Now().Add(time.Second))
 		log.Println("err:",err)
 		if err == ErrCloseSent {
-			if !temp{
-				go ListenToSendMsg(conn)
-				go ListenToReadMsg(conn)
-			}
+			log.Println("WebSocketFound-err-temp:",temp)
 			temp = true
 			go SetDisconnect()
 			return nil
 		} else if e, ok := err.(net.Error); ok && e.Temporary() {
+			log.Println("WebSocketFound-ok-temp:",temp)
+			if temp{
+				go ListenToSendMsg(conn)
+				go ListenToReadMsg(conn)
+			}
+			//disconnect <- false
+			temp = false
+			resetTimer()
+			return nil
+		} else {
+			log.Println("WebSocketFound-ok-temp:",temp)
+			if temp{
+				go ListenToSendMsg(conn)
+				go ListenToReadMsg(conn)
+			}
+			//disconnect <- false
 			temp = false
 			resetTimer()
 			return nil
+
 		}
 		return err
 	})
@@ -208,11 +226,20 @@ func ListenToReadMsg(conn *websocket.Conn) (pid int) {
 
 // 定时查询接口任务,给基点接口发送请求
 func ListenToSendMsg(conn *websocket.Conn) {
+
 	log.Println("发送消息>>>>>>>>>>>>>>>>>>>")
 	cron := cron.New()
 	// 定时规则:每隔10秒执行一次
 	tick := "*/10 * * * * ?"
 	err = cron.AddFunc(tick, func() {
+		if(temp) {
+			conn = WebSocketFound()
+			if conn != nil {
+				log.Println("正在重连-------")
+				defer conn.Close()
+				ctrl.GetConnection(conn)
+			}
+		}
 		//判断conn是否还在  todo
 		//
 		svc := converseService.GetConverseService(utils.DBE)
@@ -246,9 +273,11 @@ func ListenToSendMsg(conn *websocket.Conn) {
 			}
 		}
 	})
-	if !temp {
+	if !cronstart {
+		cronstart = true
 		cron.Start()
-	} else {
+	}
+	if temp {
 		svc := converseService.GetConverseService(utils.DBE)
 		sql:=" update sample_storage_task set StatusCode =4 where StatusCode =1"
 		svc.DBE.Exec(sql)