Skip to content

Commit 7936cba

Browse files
committed
Added additional goroutines for client's loop channels, and set channels to nil when closed
1 parent 128f0ca commit 7936cba

File tree

1 file changed

+19
-6
lines changed
  • internal/events/websocket/mock_server

1 file changed

+19
-6
lines changed

internal/events/websocket/mock_server/server.go

+19-6
Original file line numberDiff line numberDiff line change
@@ -161,17 +161,21 @@ func (ws *WebSocketServer) WsPageHandler(w http.ResponseWriter, r *http.Request)
161161
client.pingLoopChan = make(chan struct{})
162162
client.keepAliveChanOpen = true
163163
client.pingChanOpen = true
164-
go func() {
165-
// Set pong handler. Resets the read deadline when pong is received.
166-
conn.SetPongHandler(func(string) error {
167-
conn.SetReadDeadline(time.Now().Add(time.Second * KEEPALIVE_TIMEOUT_SECONDS))
168-
return nil
169-
})
170164

165+
// Set pong handler. Resets the read deadline when pong is received.
166+
conn.SetPongHandler(func(string) error {
167+
conn.SetReadDeadline(time.Now().Add(time.Second * KEEPALIVE_TIMEOUT_SECONDS))
168+
return nil
169+
})
170+
171+
// Keep Alive message loop
172+
go func() {
171173
for {
172174
select {
173175
case <-client.keepAliveLoopChan:
174176
client.keepAliveTimer.Stop()
177+
client.keepAliveLoopChan = nil
178+
break
175179

176180
case <-client.keepAliveTimer.C: // Send KeepAlive message
177181
keepAliveMsg, _ := json.Marshal(
@@ -192,9 +196,18 @@ func (ws *WebSocketServer) WsPageHandler(w http.ResponseWriter, r *http.Request)
192196
if ws.DebugEnabled {
193197
log.Printf("Sent session_keepalive to client [%s]", client.clientName)
194198
}
199+
}
200+
}
201+
}()
195202

203+
// Ping/pong handler loop
204+
go func() {
205+
for {
206+
select {
196207
case <-client.pingLoopChan:
197208
client.pingTimer.Stop()
209+
client.pingLoopChan = nil
210+
break
198211

199212
case <-client.pingTimer.C: // Send ping
200213
err := client.SendMessage(websocket.PingMessage, []byte{})

0 commit comments

Comments
 (0)