zhangmeng
2019-05-17 d23f54e337d12fb4e6d5a0a5e1f041a51005e10c
提交 | 用户 | 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
12     surveyorTime = -1
13 )
14
15 func optDefault() map[string]interface{} {
16     options := make(map[string]interface{})
17
18     options[mangos.OptionMaxRecvSize] = maxRecvSize
19     options[mangos.OptionWriteQLen] = 0
20     options[mangos.OptionReadQLen] = 0
21     options[mangos.OptionRecvDeadline] = time.Second
22     options[mangos.OptionSendDeadline] = time.Second
23     // options[mangos.OptionRaw] = true
24
25     return options
26 }
27
28 func optRaw(options map[string]interface{}) map[string]interface{} {
29
30     options[mangos.OptionRaw] = true
31     return options
32 }
33
34 func optOther(p protocol, options map[string]interface{}, o ...interface{}) map[string]interface{} {
35     // len 1 or 0, sub topic
36     if p == SUB {
37         if len(o) == 1 {
38             v := o[0]
39             if t, ok := v.(string); ok {
40                 options[mangos.OptionSubscribe] = []byte(t)
41             }
42         } else {
43             options[mangos.OptionSubscribe] = []byte("")
44         }
45     }
46
47     // len 1 or 0, surveyor time
48     if p == SURVEYOR {
49         if len(o) == 1 {
50             v := o[0]
51             if t, ok := v.(int); ok {
52                 surveyorTime = t / 2
53                 if surveyorTime == 0 {
54                     surveyorTime = 1
55                 }
56             }
57         }
58         options[mangos.OptionSurveyTime] = time.Duration(surveyorTime) * time.Second
59     }
60     return options
61 }
62
63 func setSocketOptions(sock mangos.Socket, options map[string]interface{}) error {
64
65     for k, v := range options {
66         if err := sock.SetOption(k, v); err != nil {
67             return err
68         }
69     }
70     return nil
71 }