forked from segmentio/nsq-go
-
Notifications
You must be signed in to change notification settings - Fork 0
/
identify.go
64 lines (49 loc) · 1.21 KB
/
identify.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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
package nsqlookup
import (
"bufio"
"encoding/binary"
"encoding/json"
"io"
)
type Identify struct {
Info NodeInfo
}
func (c Identify) Name() string {
return "IDENTIFY"
}
func (c Identify) Write(w *bufio.Writer) (err error) {
var body []byte
if _, err = w.WriteString("IDENTIFY\n"); err != nil {
return
}
if body, err = json.Marshal(c.Info); err != nil {
return
}
if err = binary.Write(w, binary.BigEndian, int32(len(body))); err != nil {
return
}
_, err = w.Write(body)
return
}
func readIdentify(r *bufio.Reader, args ...string) (cmd Identify, err error) {
var body []byte
var size int32
if err = binary.Read(r, binary.BigEndian, &size); err != nil {
err = makeErrBadBody("IDENTIFY failed to read body size")
return
}
body = make([]byte, int(size))
if _, err = io.ReadFull(r, body); err != nil {
err = makeErrBadBody("IDENTIFY failed to read body")
return
}
if err = json.Unmarshal(body, &cmd.Info); err != nil {
err = makeErrBadBody("IDENTIFY failed to decode JSON body")
return
}
if len(cmd.Info.BroadcastAddress) == 0 || cmd.Info.TcpPort == 0 || cmd.Info.HttpPort == 0 || len(cmd.Info.Version) == 0 {
err = makeErrBadBody("IDENTIFY missing fields")
return
}
return
}