| | |
| | | return |
| | | default: |
| | | if recvmessage, err = socket.Sock.Recv(); err != nil { |
| | | //logger.Error("[camera] err is: ", err) |
| | | |
| | | if socket.UseSHM { |
| | | if tryCount > util.SHMMaxTryCount { |
| | | socket.Sock.Close() |
| | | socket, err = util.NewSocketListen(socket.Mode, socket.URL, socket.UseSHM) |
| | | logger.Info("CAMERA SHM TRY :", tryCount, " RESTART IT") |
| | | tryCount++ |
| | | socket = util.MaybeRestartSocket(socket, &tryCount) |
| | | |
| | | tryCount = 0 |
| | | |
| | | continue |
| | | } |
| | | tryCount++ |
| | | } |
| | | // if socket.UseSHM { |
| | | // if tryCount > util.SHMMaxTryCount { |
| | | // socket.Sock.Close() |
| | | // socket, err = util.NewSocketListen(socket.Mode, socket.URL, socket.UseSHM) |
| | | // logger.Info("SDK SEND SHM TRY :", util.SHMMaxTryCount, " RESTART IT") |
| | | // tryCount = 0 |
| | | // continue |
| | | // } |
| | | // tryCount++ |
| | | // } |
| | | continue |
| | | } |
| | | |
| | |
| | | return |
| | | default: |
| | | if msg, err := socket.Sock.Recv(); err != nil { |
| | | if socket.UseSHM { |
| | | if tryCount > util.SHMMaxTryCount { |
| | | socket.Sock.Close() |
| | | socket, err = util.NewSocketListen(socket.Mode, socket.URL, socket.UseSHM) |
| | | logger.Info("SDK RECV SHM TRY :", tryCount, " RESTART IT") |
| | | tryCount++ |
| | | socket = util.MaybeRestartSocket(socket, &tryCount) |
| | | |
| | | tryCount = 0 |
| | | |
| | | continue |
| | | } |
| | | tryCount++ |
| | | } |
| | | // if socket.UseSHM { |
| | | // if tryCount > util.SHMMaxTryCount { |
| | | // socket.Sock.Close() |
| | | // socket, err = util.NewSocketListen(socket.Mode, socket.URL, socket.UseSHM) |
| | | // logger.Info("SDK SEND SHM TRY :", util.SHMMaxTryCount, " RESTART IT") |
| | | // tryCount = 0 |
| | | // continue |
| | | // } |
| | | // tryCount++ |
| | | // } |
| | | continue |
| | | } else { |
| | | err = proto.Unmarshal(msg, &repsdkmsg) |
| | |
| | | logger.Error("failed send:sdkid=", sdkid) |
| | | } |
| | | |
| | | if socket.UseSHM { |
| | | if tryCount > util.SHMMaxTryCount { |
| | | socket.Sock.Close() |
| | | socket, err = util.NewSocketListen(socket.Mode, socket.URL, socket.UseSHM) |
| | | logger.Info("SDK SEND SHM TRY :", util.SHMMaxTryCount, " RESTART IT") |
| | | tryCount++ |
| | | socket = util.MaybeRestartSocket(socket, &tryCount) |
| | | |
| | | tryCount = 0 |
| | | |
| | | continue |
| | | } |
| | | tryCount++ |
| | | } |
| | | // if socket.UseSHM { |
| | | // if tryCount > util.SHMMaxTryCount { |
| | | // socket.Sock.Close() |
| | | // socket, err = util.NewSocketListen(socket.Mode, socket.URL, socket.UseSHM) |
| | | // logger.Info("SDK SEND SHM TRY :", util.SHMMaxTryCount, " RESTART IT") |
| | | // tryCount = 0 |
| | | // continue |
| | | // } |
| | | // tryCount++ |
| | | // } |
| | | |
| | | continue |
| | | } |
| | |
| | | package util |
| | | |
| | | import ( |
| | | "basic.com/valib/deliver.git" |
| | | "context" |
| | | "errors" |
| | | |
| | | "basic.com/valib/deliver.git" |
| | | |
| | | "basic.com/valib/logger.git" |
| | | ) |
| | | |
| | | const SHMMaxTryCount = 3 |
| | | const ( |
| | | // 共享内存发送/接收失败shmMaxTryCount次重新创建通道尝试 |
| | | shmMaxTryCount = 7 |
| | | // 不论共享内存/mangos发送/接收失败最大次数,认为当前通道不再使用, 关闭 |
| | | // 有问题,摄像机长时间断网后重连,但是通道关闭 |
| | | tooLongFailed = 300 |
| | | ) |
| | | |
| | | type SocketContext struct { |
| | | Sock deliver.Deliver |
| | |
| | | |
| | | return socket, nil |
| | | } |
| | | |
| | | func MaybeRestartSocket(socket SocketContext, tryCnt *int) SocketContext { |
| | | if socket.UseSHM { |
| | | if *tryCnt > shmMaxTryCount { |
| | | logger.Info("SDK SEND SHM TRY :", shmMaxTryCount, " RESTART IT") |
| | | |
| | | socket.Sock.Close() |
| | | newSocket, err := NewSocketListen(socket.Mode, socket.URL, socket.UseSHM) |
| | | if err != nil { |
| | | return socket |
| | | } |
| | | |
| | | *tryCnt = 0 |
| | | |
| | | return newSocket |
| | | } |
| | | } |
| | | |
| | | return socket |
| | | } |