zhangmeng
2019-09-27 2d390df9ede39c9d7c34bd8190b9329cfc371325
提交 | 用户 | age
d23f54 1 package deliver
Z 2
3 import (
4     "time"
5
6     "nanomsg.org/go-mangos"
7 )
8
9 // maxRecvSize max recv size
10 var (
11     maxRecvSize  = 33 * 1024 * 1024
3e6484 12     surveyorTime = 0
dd22fd 13     timeout      = time.Duration(25)
d23f54 14 )
Z 15
dd22fd 16 func setTimeOut(tm int) {
Z 17     timeout = time.Duration(tm)
18 }
19
d23f54 20 func optDefault() map[string]interface{} {
6049d7 21
d23f54 22     options := make(map[string]interface{})
Z 23
24     options[mangos.OptionMaxRecvSize] = maxRecvSize
25     options[mangos.OptionWriteQLen] = 0
26     options[mangos.OptionReadQLen] = 0
6049d7 27     options[mangos.OptionRecvDeadline] = timeout * time.Millisecond
Z 28     options[mangos.OptionSendDeadline] = timeout * time.Millisecond
d23f54 29     // options[mangos.OptionRaw] = true
Z 30
31     return options
32 }
33
34 func optRaw(options map[string]interface{}) map[string]interface{} {
35
36     options[mangos.OptionRaw] = true
37     return options
38 }
39
40 func optOther(p protocol, options map[string]interface{}, o ...interface{}) map[string]interface{} {
41     // len 1 or 0, sub topic
42     if p == SUB {
43         if len(o) == 1 {
44             v := o[0]
45             if t, ok := v.(string); ok {
46                 options[mangos.OptionSubscribe] = []byte(t)
47             }
48         } else {
49             options[mangos.OptionSubscribe] = []byte("")
50         }
51     }
52
53     // len 1 or 0, surveyor time
54     if p == SURVEYOR {
55         if len(o) == 1 {
56             v := o[0]
57             if t, ok := v.(int); ok {
58                 surveyorTime = t / 2
59                 if surveyorTime == 0 {
60                     surveyorTime = 1
61                 }
62             }
63         }
64         options[mangos.OptionSurveyTime] = time.Duration(surveyorTime) * time.Second
65     }
66     return options
67 }
68
69 func setSocketOptions(sock mangos.Socket, options map[string]interface{}) error {
70
71     for k, v := range options {
72         if err := sock.SetOption(k, v); err != nil {
73             return err
74         }
75     }
76     return nil
77 }