-
Notifications
You must be signed in to change notification settings - Fork 0
/
find_coordinator_response.go
71 lines (62 loc) · 1.39 KB
/
find_coordinator_response.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
65
66
67
68
69
70
71
package protocol
import "time"
type Coordinator struct {
NodeID int32
Host string
Port int32
}
type FindCoordinatorResponse struct {
APIVersion int16
ThrottleTime time.Duration
ErrorCode int16
ErrorMessage *string
Coordinator Coordinator
}
func (r *FindCoordinatorResponse) Encode(e PacketEncoder) (err error) {
if r.APIVersion >= 1 {
e.PutInt32(int32(r.ThrottleTime / time.Millisecond))
}
e.PutInt16(r.ErrorCode)
if r.APIVersion >= 1 {
if err = e.PutNullableString(r.ErrorMessage); err != nil {
return err
}
}
e.PutInt32(r.Coordinator.NodeID)
if err = e.PutString(r.Coordinator.Host); err != nil {
return err
}
e.PutInt32(r.Coordinator.Port)
return nil
}
func (r *FindCoordinatorResponse) Decode(d PacketDecoder, version int16) (err error) {
r.APIVersion = version
if version >= 1 {
throttle, err := d.Int32()
if err != nil {
return err
}
r.ThrottleTime = time.Duration(throttle) * time.Millisecond
}
if r.ErrorCode, err = d.Int16(); err != nil {
return err
}
if version >= 1 {
if r.ErrorMessage, err = d.NullableString(); err != nil {
return err
}
}
if r.Coordinator.NodeID, err = d.Int32(); err != nil {
return err
}
if r.Coordinator.Host, err = d.String(); err != nil {
return err
}
if r.Coordinator.Port, err = d.Int32(); err != nil {
return err
}
return nil
}
func (r *FindCoordinatorResponse) Version() int16 {
return r.APIVersion
}