-
Notifications
You must be signed in to change notification settings - Fork 18
/
leave_group_request.go
61 lines (47 loc) · 1.38 KB
/
leave_group_request.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
package healer
import (
"encoding/binary"
)
//LeaveGroup Request (Version: 0) => group_id member_id
//group_id => STRING
//member_id => STRING
//FIELD DESCRIPTION
//group_id The unique group identifier
//member_id The member id assigned by the group coordinator or null if leaveing for the first time.
// version 0
type LeaveGroupRequest struct {
*RequestHeader
GroupID string
MemberID string
}
func NewLeaveGroupRequest(clientID, groupID, memberID string) *LeaveGroupRequest {
requestHeader := &RequestHeader{
APIKey: API_LeaveGroup,
APIVersion: 0,
ClientID: &clientID,
}
return &LeaveGroupRequest{
RequestHeader: requestHeader,
GroupID: groupID,
MemberID: memberID,
}
}
func (r *LeaveGroupRequest) Length() int {
l := r.RequestHeader.length() + 2 + len(r.GroupID) + 2 + len(r.MemberID)
return l
}
func (r *LeaveGroupRequest) Encode(version uint16) []byte {
requestLength := r.Length()
payload := make([]byte, requestLength+4)
offset := 0
binary.BigEndian.PutUint32(payload[offset:], uint32(requestLength))
offset += 4
offset += r.RequestHeader.EncodeTo(payload[offset:])
binary.BigEndian.PutUint16(payload[offset:], uint16(len(r.GroupID)))
offset += 2
offset += copy(payload[offset:], r.GroupID)
binary.BigEndian.PutUint16(payload[offset:], uint16(len(r.MemberID)))
offset += 2
offset += copy(payload[offset:], r.MemberID)
return payload
}