/
subscribe.go
49 lines (42 loc) · 995 Bytes
/
subscribe.go
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
package mqtt
import (
"flag"
"log"
)
type subscribe struct {
cli *client
topic string
qos uint
idgen func() string
unsub bool
}
func NewSubscribeCommand(cli *client, args []string) Command {
c := &subscribe{}
fs := flag.NewFlagSet("subscribe", flag.ExitOnError)
setOpt(fs, &cli.opt)
fs.StringVar(&c.topic, "topic", "/fperf/topic", "Topic to subscribe")
fs.UintVar(&c.qos, "qos", 1, "Qos should be 0, 1, 2")
fs.BoolVar(&c.unsub, "unsub", false, "Unsub after subscribe")
if err := fs.Parse(args[1:]); err != nil {
log.Fatal(err)
}
c.cli = cli
c.idgen = idgenerator()
return c
}
func (c *subscribe) Exec() error {
qos := c.qos
topic := c.topic
cli := c.cli
mq := cli.cli
idstr := c.idgen()
if token := mq.Subscribe(topic+"/"+idstr, byte(qos), nil); token.Wait() && token.Error() != nil {
return token.Error()
}
if c.unsub {
if token := mq.Unsubscribe(topic + "/" + idstr); token.Wait() && token.Error() != nil {
return token.Error()
}
}
return nil
}