-
Notifications
You must be signed in to change notification settings - Fork 9
/
Copy pathproto.go
129 lines (103 loc) · 2.35 KB
/
proto.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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
package broadcaster
import "fmt"
// Message types used between server and client.
const (
// Client: start authentication
AuthMessage = "auth"
// Server: Authentication succeeded
AuthOKMessage = "authOk"
// Server: Authentication failed
AuthFailedMessage = "authError"
// Client: Subscribe to channel
SubscribeMessage = "subscribe"
// Server: Subscribe succeeded
SubscribeOKMessage = "subscribeOk"
// Server: Subscribe failed
SubscribeErrorMessage = "subscribeError"
// Server: Broadcast message
MessageMessage = "message"
// Client: Unsubscribe from channel
UnsubscribeMessage = "unsubscribe"
// Server: Unsubscribe succeeded
UnsubscribeOKMessage = "unsubscribeOk"
// Server: Unsubscribe failed
UnsubscribeErrorMessage = "unsubscribeError"
// Client: Send me more messages
PollMessage = "poll"
// Client: I'm still alive
PingMessage = "ping"
// Server: Unknown message
UnknownMessage = "unknown"
// Server: Server error
ServerErrorMessage = "serverError"
)
type ClientMessage map[string]interface{}
func (c ClientMessage) ResultId() string {
t := c.Type()
if t == SubscribeOKMessage || t == SubscribeErrorMessage {
t = SubscribeMessage
}
if t == UnsubscribeOKMessage {
t = UnsubscribeMessage
}
return fmt.Sprintf("%s_%s", t, c["channel"])
}
func (c ClientMessage) Type() string {
s, ok := c["__type"].(string)
if !ok {
return ""
}
return s
}
func (c ClientMessage) Token() string {
s, ok := c["__token"].(string)
if !ok {
return ""
}
return s
}
func (c ClientMessage) Channel() string {
s, ok := c["channel"].(string)
if !ok {
return ""
}
return s
}
func (c ClientMessage) Reason() string {
s, ok := c["reason"].(string)
if !ok {
return ""
}
return s
}
func newMessage(t string) ClientMessage {
return ClientMessage{
"__type": t,
}
}
func newErrorMessage(t string, err error) ClientMessage {
return ClientMessage{
"__type": t,
"reason": err.Error(),
}
}
func newChannelMessage(t, channel string) ClientMessage {
return ClientMessage{
"__type": t,
"channel": channel,
}
}
func newBroadcastMessage(channel, body string) ClientMessage {
return ClientMessage{
"__type": MessageMessage,
"channel": channel,
"body": body,
}
}
func newChannelErrorMessage(t, channel string, err error) ClientMessage {
return ClientMessage{
"__type": t,
"channel": channel,
"reason": err.Error(),
}
}