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