From a735e666cff14e4e485110d2a59d401b4be61b9b Mon Sep 17 00:00:00 2001
From: zhangmeng <775834166@qq.com>
Date: 星期四, 29 八月 2019 17:50:09 +0800
Subject: [PATCH] add recover

---
 go.sum           |    4 ++--
 go.mod           |    2 +-
 sdk/sdk.go       |   28 ++++++++++++++++++++++++++++
 util/util.go     |   10 ++++++++++
 camera/camera.go |   13 +++++++++++++
 5 files changed, 54 insertions(+), 3 deletions(-)

diff --git a/camera/camera.go b/camera/camera.go
index d039361..727e017 100644
--- a/camera/camera.go
+++ b/camera/camera.go
@@ -124,6 +124,8 @@
 
 func Recv(socket util.SocketContext) {
 
+	tryCount := 0
+
 	var recvmessage []byte
 	var imagemsg protomsg.Image
 	var err error
@@ -135,6 +137,17 @@
 		default:
 			if recvmessage, err = socket.Sock.Recv(); err != nil {
 				//logger.Error("[camera] err is: ", err)
+				if socket.UseSHM {
+					if tryCount > util.SHMMaxTryCount {
+						socket, err = util.NewSocketListen(socket.Mode, socket.URL, socket.UseSHM)
+						fmt.Println("CAMERA SHM TRY :", tryCount, " RESTART IT")
+
+						tryCount = 0
+
+						continue
+					}
+					tryCount++
+				}
 				continue
 			}
 
diff --git a/go.mod b/go.mod
index ce488a8..b040dd0 100644
--- a/go.mod
+++ b/go.mod
@@ -7,7 +7,7 @@
 	basic.com/pubsub/protomsg.git v0.0.0-20190709070734-b34c868adcc2
 	basic.com/valib/deliver.git v0.0.0-20190827070620-058b21100da6
 	basic.com/valib/gopherdiscovery.git v0.0.0-20190605034340-15d89d8b4e28
-	basic.com/valib/shm.git v0.0.0-20190826090635-7db9aba5ca93 // indirect
+	basic.com/valib/shm.git v0.0.0-20190829074754-ad2e00879627 // indirect
 	github.com/ajg/form v1.5.1 // indirect
 	github.com/gogo/protobuf v1.2.1
 	github.com/golang/protobuf v1.3.1
diff --git a/go.sum b/go.sum
index 8dcdca4..1bd5d65 100644
--- a/go.sum
+++ b/go.sum
@@ -18,8 +18,8 @@
 basic.com/valib/deliver.git v0.0.0-20190827070620-058b21100da6/go.mod h1:bkYiTUGzckyNOjAgn9rB/DOjFzwoSHJlruuWQ6hu6IY=
 basic.com/valib/gopherdiscovery.git v0.0.0-20190605034340-15d89d8b4e28 h1:3hejanzPEBvZSSvjIqayB83/6/6SLLrX9oNZAdiYELg=
 basic.com/valib/gopherdiscovery.git v0.0.0-20190605034340-15d89d8b4e28/go.mod h1:CQ+UJyZV8MRzwwckncdUDu6/RDTKAzSIPCxc9tFcwPs=
-basic.com/valib/shm.git v0.0.0-20190826090635-7db9aba5ca93 h1:KawyUKwFGIQIv043VGV1QvXOiU8aq7DEyB3QhAq+Syc=
-basic.com/valib/shm.git v0.0.0-20190826090635-7db9aba5ca93/go.mod h1:yYRM7bM9y0KKd4IfNt3myjsvkFVFIIWNjsvK14tNbq4=
+basic.com/valib/shm.git v0.0.0-20190829074754-ad2e00879627 h1:y0t0XG2uPSygF+hiSdLP3Lr959tip/FDPYJpHhbKRec=
+basic.com/valib/shm.git v0.0.0-20190829074754-ad2e00879627/go.mod h1:yYRM7bM9y0KKd4IfNt3myjsvkFVFIIWNjsvK14tNbq4=
 github.com/ajg/form v1.5.1 h1:t9c7v8JUKu/XxOGBU0yjNpaMloxGEJhUkqFRq0ibGeU=
 github.com/ajg/form v1.5.1/go.mod h1:uL1WgH+h2mgNtvBq0339dVnzXdBETtL2LeUXaIv25UY=
 github.com/gogo/protobuf v1.2.1 h1:/s5zKNz0uPFCZ5hddgPdo2TK2TVrUNMn0OOX8/aZMTE=
diff --git a/sdk/sdk.go b/sdk/sdk.go
index 42bff5d..250753e 100644
--- a/sdk/sdk.go
+++ b/sdk/sdk.go
@@ -206,6 +206,9 @@
 }
 
 func Recv(socket util.SocketContext) {
+
+	tryCount := 0
+
 	var repsdkmsg = protomsg.SdkMessage{}
 	for {
 		select {
@@ -214,6 +217,17 @@
 			return
 		default:
 			if msg, err := socket.Sock.Recv(); err != nil {
+				if socket.UseSHM {
+					if tryCount > util.SHMMaxTryCount {
+						socket, err = util.NewSocketListen(socket.Mode, socket.URL, socket.UseSHM)
+						fmt.Println("SDK RECV SHM TRY :", tryCount, " RESTART IT")
+
+						tryCount = 0
+
+						continue
+					}
+					tryCount++
+				}
 				continue
 			} else {
 				err = proto.Unmarshal(msg, &repsdkmsg)
@@ -232,6 +246,8 @@
 
 func Send(sdkid string, socket util.SocketContext, in chan protomsg.SdkMessage) {
 
+	tryCount := 0
+
 	for {
 		select {
 		case <-socket.Context.Done():
@@ -247,6 +263,18 @@
 
 				if err := socket.Sock.Send(data); err != nil {
 					logger.Error("failed send:sdkid=", sdkid)
+
+					if socket.UseSHM {
+						if tryCount > util.SHMMaxTryCount {
+							socket, err = util.NewSocketListen(socket.Mode, socket.URL, socket.UseSHM)
+							fmt.Println("SDK SEND SHM TRY :", util.SHMMaxTryCount, " RESTART IT")
+
+							tryCount = 0
+
+							continue
+						}
+						tryCount++
+					}
 					continue
 				}
 				logger.Debug(sdkid, " send success: ", len(data))
diff --git a/util/util.go b/util/util.go
index 264880a..875e0f7 100644
--- a/util/util.go
+++ b/util/util.go
@@ -11,10 +11,16 @@
 	"taskpubsub/logger"
 )
 
+const SHMMaxTryCount = 3
+
 type SocketContext struct {
 	Sock    deliver.Deliver
 	Context context.Context
 	Cancel  context.CancelFunc
+
+	Mode   int
+	URL    string
+	UseSHM bool
 }
 
 //  1. oldstring element is not in new  : abandon(delete)
@@ -89,6 +95,10 @@
 	socket.Context = ctx
 	socket.Cancel = cancel
 
+	socket.Mode = mode
+	socket.URL = url
+	socket.UseSHM = shm
+
 	if shm {
 		var err error
 		socket.Sock, err = deliver.NewServerWithError(deliver.Mode(mode), url)

--
Gitblit v1.8.0