From aaae9917c3df122e2bbcf591417c1b58021d79fc Mon Sep 17 00:00:00 2001
From: zhangmeng <775834166@qq.com>
Date: 星期三, 15 五月 2019 16:58:03 +0800
Subject: [PATCH] add close

---
 nng.go |   43 ++++++++++++++++++++++++++++++++++++++-----
 1 files changed, 38 insertions(+), 5 deletions(-)

diff --git a/nng.go b/nng.go
index 84d3699..61b5e76 100644
--- a/nng.go
+++ b/nng.go
@@ -5,6 +5,7 @@
 	"fmt"
 	"os"
 	"strings"
+	"time"
 
 	"nanomsg.org/go-mangos"
 	"nanomsg.org/go-mangos/protocol/bus"
@@ -31,11 +32,17 @@
 		return errors.New("please init NNG first")
 	}
 
+	switch n.sock.GetProtocol().Number() {
+	case mangos.ProtoSurveyor:
+		time.Sleep(surveyorTime * 2)
+	default:
+	}
 	if _, err := n.sock.GetOption(mangos.OptionRaw); err == nil {
 		msg := mangos.NewMessage(len(data))
 		msg.Body = data
 		return n.sock.SendMsg(msg)
 	}
+
 	return n.sock.Send(data)
 }
 
@@ -49,6 +56,13 @@
 		return msg.Body, err
 	}
 	return n.sock.Recv()
+}
+
+// Close impl interface Deliver
+func (n *NNG) Close() {
+	if n.sock != nil {
+		n.sock.Close()
+	}
 }
 
 // nngProducer create from deliver Mode
@@ -92,12 +106,15 @@
 	return nil
 }
 
-// MaxRecvSize max recv size
-var MaxRecvSize = 33 * 1024 * 1024
+// maxRecvSize max recv size
+var (
+	maxRecvSize  = 33 * 1024 * 1024
+	surveyorTime = time.Second / 2
+)
 
 func defualtSocketOptions(sock mangos.Socket) error {
 	var err error
-	if err = sock.SetOption(mangos.OptionMaxRecvSize, MaxRecvSize); err != nil {
+	if err = sock.SetOption(mangos.OptionMaxRecvSize, maxRecvSize); err != nil {
 		sock.Close()
 		return err
 	}
@@ -109,7 +126,11 @@
 		sock.Close()
 		return err
 	}
-	// if err = sock.SetOption(mangos.OptionNoDelay, true); err != nil {
+	// if err = sock.SetOption(mangos.OptionRecvDeadline, time.Second); err != nil {
+	// 	sock.Close()
+	// 	return err
+	// }
+	// if err = sock.SetOption(mangos.OptionSendDeadline, time.Second); err != nil {
 	// 	sock.Close()
 	// 	return err
 	// }
@@ -127,7 +148,8 @@
 	if err != nil {
 		return err
 	}
-	if sock.GetProtocol().Number() == mangos.ProtoSub {
+	switch sock.GetProtocol().Number() {
+	case mangos.ProtoSub:
 		for _, arg := range args {
 			switch arg.(type) {
 			case string:
@@ -136,6 +158,17 @@
 				err = sock.SetOption(mangos.OptionSubscribe, []byte(""))
 			}
 		}
+	case mangos.ProtoSurveyor:
+		for _, arg := range args {
+			switch arg.(type) {
+			case int:
+				surveyorTime = time.Duration(arg.(int)/2) * time.Second
+			default:
+			}
+			err = sock.SetOption(mangos.OptionSurveyTime, surveyorTime)
+		}
+	default:
+		fmt.Println("no additional args")
 	}
 
 	return nil

--
Gitblit v1.8.0