zhangmeng
2019-08-30 383557064fd77c028fd71facf8ec1cf6b278d3e6
nng.go
@@ -21,26 +21,23 @@
   "nanomsg.org/go-mangos/transport/all"
)
// type deliver
type td int
const (
   agent = td(iota)
   coactee
)
// NNG mangos wrap
type NNG struct {
   sock   mangos.Socket
   server bool
   mode   Mode
   url    string
   sock mangos.Socket
   typ  td
   mode Mode
   url  string
   sendMsg *mangos.Message
   arguments []interface{}
}
// Send impl interface Diliver
func (n *NNG) Send(data []byte) error {
   if n == nil {
      return errors.New("please init NNG first")
   }
   var err error
   if n.sock == nil {
      n.sock, err = n.makeNNG(agent)
@@ -54,14 +51,25 @@
      time.Sleep(time.Duration(surveyorTime*2) * time.Second)
   }
   msg := mangos.NewMessage(len(data))
   msg.Body = data
   return n.sock.SendMsg(msg)
   // msg := mangos.NewMessage(len(data))
   // msg.Body = data
   // return n.sock.SendMsg(msg)
   if n.sendMsg == nil {
      n.sendMsg = &mangos.Message{}
      n.sendMsg.Header = make([]byte, 32)
   }
   n.sendMsg.Body = data
   return n.sock.SendMsg(n.sendMsg)
}
// Recv impl interface Diliver
func (n *NNG) Recv() ([]byte, error) {
   if n == nil {
      return nil, errors.New("please init NNG first")
   }
   var err error
   if n.sock == nil {
@@ -80,9 +88,16 @@
}
// Recv2 impl interface
func (n *NNG) Recv2(data []byte) (l int, err error) {
   data, err = n.Recv()
   l = len(data)
   return l, err
}
// Close impl interface Deliver
func (n *NNG) Close() {
   if n.sock != nil {
   if n != nil && n.sock != nil {
      n.sock.Close()
      n.sock = nil
   }
@@ -93,7 +108,7 @@
   rmExistedIpcName(url)
   return &NNG{
      server:    true,
      typ:       agent,
      mode:      m,
      url:       url,
      arguments: args,
@@ -103,7 +118,7 @@
func nngClient(m Mode, url string, args ...interface{}) *NNG {
   return &NNG{
      server:    false,
      typ:       coactee,
      mode:      m,
      url:       url,
      arguments: args,
@@ -128,7 +143,7 @@
   switch n.mode {
   case Bus:
      sock, err = n.busMakeNNG(typ)
   case ReqRep:
   case ReqRep, SurvResp:
      sock, err = n.rrMakeNNG(typ)
   default:
      sock, err = n.ppMakeNNG(typ)