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