forked from bearyinnovative/bearychat-go
/
rtm_context.go
53 lines (41 loc) · 836 Bytes
/
rtm_context.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
package bearychat
import "time"
type RTMContext struct {
Loop RTMLoop
uid string
}
func (c *RTMContext) UID() string {
return c.uid
}
func NewRTMContext(token string) (*RTMContext, error) {
rtmClient, err := NewRTMClient(token)
if err != nil {
return nil, err
}
user, wsHost, err := rtmClient.Start()
if err != nil {
return nil, err
}
rtmLoop, err := NewRTMLoop(wsHost)
if err != nil {
return nil, err
}
return &RTMContext{
Loop: rtmLoop,
uid: user.Id,
}, nil
}
func (c *RTMContext) Run() (error, chan RTMMessage, chan error) {
err := c.Loop.Start()
if err != nil {
return err, nil, nil
}
defer c.Loop.Stop()
go c.Loop.Keepalive(time.NewTicker(10 * time.Second))
errC := c.Loop.ErrC()
messageC, err := c.Loop.ReadC()
if err != nil {
return err, nil, nil
}
return nil, messageC, errC
}