| | |
| | | func (n *NNG) Close() { |
| | | if n.sock != nil { |
| | | n.sock.Close() |
| | | n.sock = nil |
| | | } |
| | | } |
| | | |
| | | // nngProducer create from deliver Mode |
| | | func nngProducer(m Mode, url string, args ...interface{}) *NNG { |
| | | func nngListener(m Mode, url string, args ...interface{}) *NNG { |
| | | |
| | | rmExistedIpcName(url) |
| | | if sock, err := newSocket(protoProducer(m)); err == nil { |
| | |
| | | } |
| | | if err = sock.Listen(url); err != nil { |
| | | sock.Close() |
| | | sock = nil |
| | | return nil |
| | | } |
| | | return &NNG{ |
| | |
| | | return nil |
| | | } |
| | | |
| | | // nngConsumer create from deliver Mode |
| | | func nngConsumer(m Mode, url string, args ...interface{}) *NNG { |
| | | func nngDialer(m Mode, url string, args ...interface{}) *NNG { |
| | | |
| | | if sock, err := newSocket(protoConsumer(m)); err == nil { |
| | | if err = setSocketOptions(sock, args); err != nil { |
| | |
| | | |
| | | if err = sock.Dial(url); err != nil { |
| | | sock.Close() |
| | | sock = nil |
| | | return nil |
| | | } |
| | | |
| | |
| | | surveyorTime = time.Second / 2 |
| | | ) |
| | | |
| | | func defualtSocketOptions(sock mangos.Socket) error { |
| | | var err error |
| | | if err = sock.SetOption(mangos.OptionMaxRecvSize, maxRecvSize); err != nil { |
| | | sock.Close() |
| | | return err |
| | | } |
| | | if err = sock.SetOption(mangos.OptionWriteQLen, 0); err != nil { |
| | | sock.Close() |
| | | return err |
| | | } |
| | | if err = sock.SetOption(mangos.OptionReadQLen, 0); err != nil { |
| | | sock.Close() |
| | | return err |
| | | } |
| | | 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 |
| | | } |
| | | if err = sock.SetOption(mangos.OptionRaw, true); err != nil { |
| | | sock.Close() |
| | | return err |
| | | } |
| | | func defualtSocketOptions() map[string]interface{} { |
| | | |
| | | return nil |
| | | options := make(map[string]interface{}) |
| | | |
| | | options[mangos.OptionMaxRecvSize] = maxRecvSize |
| | | options[mangos.OptionWriteQLen] = 0 |
| | | options[mangos.OptionReadQLen] = 0 |
| | | options[mangos.OptionRecvDeadline] = time.Second |
| | | options[mangos.OptionSendDeadline] = time.Second |
| | | options[mangos.OptionRaw] = true |
| | | |
| | | return options |
| | | } |
| | | |
| | | func setSocketOptions(sock mangos.Socket, args ...interface{}) error { |
| | | |
| | | err := defualtSocketOptions(sock) |
| | | if err != nil { |
| | | return err |
| | | } |
| | | options := defualtSocketOptions() |
| | | |
| | | switch sock.GetProtocol().Number() { |
| | | case mangos.ProtoSub: |
| | | for _, arg := range args { |
| | | switch arg.(type) { |
| | | case string: |
| | | err = sock.SetOption(mangos.OptionSubscribe, []byte(arg.(string))) |
| | | options[mangos.OptionSubscribe] = []byte(arg.(string)) |
| | | default: |
| | | err = sock.SetOption(mangos.OptionSubscribe, []byte("")) |
| | | options[mangos.OptionSubscribe] = []byte("") |
| | | } |
| | | } |
| | | case mangos.ProtoSurveyor: |
| | |
| | | surveyorTime = time.Duration(arg.(int)/2) * time.Second |
| | | default: |
| | | } |
| | | err = sock.SetOption(mangos.OptionSurveyTime, surveyorTime) |
| | | options[mangos.OptionSurveyTime] = surveyorTime |
| | | } |
| | | default: |
| | | fmt.Println("no additional args") |
| | | } |
| | | |
| | | for k, v := range options { |
| | | if err := sock.SetOption(k, v); err != nil { |
| | | return err |
| | | } |
| | | } |
| | | return nil |
| | | } |
| | | |
| | |
| | | } |
| | | |
| | | all.AddTransports(s) |
| | | // s.AddTransport(ipc.NewTransport()) |
| | | // s.AddTransport(tcp.NewTransport()) |
| | | |
| | | return s, nil |
| | | } |