This repository was archived by the owner on Jul 15, 2023. It is now read-only.
File tree Expand file tree Collapse file tree 2 files changed +39
-4
lines changed Expand file tree Collapse file tree 2 files changed +39
-4
lines changed Original file line number Diff line number Diff line change @@ -111,11 +111,39 @@ func (s *RoomAPIServer) Start() error {
111
111
return err
112
112
}
113
113
114
- go s .subscribe (psc )
115
-
116
114
ctx , cancel := context .WithCancel (context .Background ())
117
115
defer cancel ()
118
116
117
+ go func (ctx context.Context , psc redis.PubSubConn ) {
118
+ if err := s .subscribe (ctx , psc ); err != nil {
119
+ s .Logger .Println (err )
120
+ }
121
+
122
+ for {
123
+ select {
124
+ case <- ctx .Done ():
125
+ return
126
+ default :
127
+ }
128
+
129
+ redisConn , err := redis .Dial ("tcp" , s .RedisHost )
130
+ if err != nil {
131
+ s .Logger .Println (err )
132
+ break
133
+ }
134
+
135
+ psc = redis.PubSubConn {Conn : redisConn }
136
+ if err := psc .Subscribe (channelServer , channelRoom ); err != nil {
137
+ s .Logger .Println (err )
138
+ break
139
+ }
140
+
141
+ if err := s .subscribe (ctx , psc ); err != nil {
142
+ s .Logger .Println (err )
143
+ }
144
+ }
145
+ }(ctx , psc )
146
+
119
147
go s .serverManager .DeleteUnhealthServerAtPeriodic (ctx , s .ServerDeadLine )
120
148
go s .roomManager .DeleteDeadRoomAtPeriodic (ctx , s .RoomDeadLine )
121
149
Original file line number Diff line number Diff line change 1
1
package api
2
2
3
3
import (
4
+ "context"
4
5
"github.com/golang/protobuf/proto"
5
6
"github.com/gomodule/redigo/redis"
6
7
pb "github.com/iguagile/iguagile-room-proto/room"
@@ -18,8 +19,14 @@ const (
18
19
unregisterRoomMessage
19
20
)
20
21
21
- func (s * RoomAPIServer ) subscribe (psc redis.PubSubConn ) {
22
+ func (s * RoomAPIServer ) subscribe (ctx context. Context , psc redis.PubSubConn ) error {
22
23
for {
24
+ select {
25
+ case <- ctx .Done ():
26
+ return nil
27
+ default :
28
+ }
29
+
23
30
switch v := psc .Receive ().(type ) {
24
31
case redis.Message :
25
32
if len (v .Data ) <= 1 {
@@ -61,7 +68,7 @@ func (s *RoomAPIServer) subscribe(psc redis.PubSubConn) {
61
68
case redis.Subscription :
62
69
s .Logger .Printf ("Subscribe %v %v %v\n " , v .Channel , v .Kind , v .Count )
63
70
case error :
64
- s . Logger . Println ( v )
71
+ return v
65
72
}
66
73
}
67
74
}
You can’t perform that action at this time.
0 commit comments