| | |
| | | "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 |
| | | |
| | | 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) |
| | |
| | | time.Sleep(time.Duration(surveyorTime*2) * time.Second) |
| | | } |
| | | |
| | | msg := mangos.NewMessage(len(data)) |
| | | msg := mangos.NewMessage(1) |
| | | msg.Body = data |
| | | return n.sock.SendMsg(msg) |
| | | |
| | | } |
| | | |
| | | // 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 { |
| | |
| | | |
| | | } |
| | | |
| | | // 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 |
| | | } |
| | |
| | | rmExistedIpcName(url) |
| | | |
| | | return &NNG{ |
| | | server: true, |
| | | typ: agent, |
| | | mode: m, |
| | | url: url, |
| | | arguments: args, |
| | |
| | | func nngClient(m Mode, url string, args ...interface{}) *NNG { |
| | | |
| | | return &NNG{ |
| | | server: false, |
| | | typ: coactee, |
| | | mode: m, |
| | | url: url, |
| | | arguments: args, |
| | |
| | | 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) |
| | |
| | | if s[0] == "ipc" { |
| | | if _, err := os.Stat(s[1]); err == nil { |
| | | os.Remove(s[1]) |
| | | } else if !os.IsNotExist(err) { |
| | | os.Remove(s[1]) |
| | | } |
| | | } |
| | | } |