mirror of
https://github.com/FrankerFaceZ/FrankerFaceZ.git
synced 2025-08-01 15:38:31 +00:00
Make sure that the reader thread finishes when main thread
calls CloseConnection
This commit is contained in:
parent
33bf762a00
commit
37833043bd
1 changed files with 12 additions and 3 deletions
|
@ -147,12 +147,13 @@ func HandleSocketConnection(conn *websocket.Conn) {
|
||||||
_clientChan := make(chan ClientMessage)
|
_clientChan := make(chan ClientMessage)
|
||||||
_serverMessageChan := make(chan ClientMessage)
|
_serverMessageChan := make(chan ClientMessage)
|
||||||
_errorChan := make(chan error)
|
_errorChan := make(chan error)
|
||||||
|
stoppedChan := make(chan struct{})
|
||||||
|
|
||||||
var client ClientInfo
|
var client ClientInfo
|
||||||
client.MessageChannel = _serverMessageChan
|
client.MessageChannel = _serverMessageChan
|
||||||
|
|
||||||
// Launch receiver goroutine
|
// Launch receiver goroutine
|
||||||
go func(errorChan chan<- error, clientChan chan<- ClientMessage) {
|
go func(errorChan chan<- error, clientChan chan<- ClientMessage, stoppedChan <-chan struct{}) {
|
||||||
var msg ClientMessage
|
var msg ClientMessage
|
||||||
var messageType int
|
var messageType int
|
||||||
var packet []byte
|
var packet []byte
|
||||||
|
@ -171,7 +172,13 @@ func HandleSocketConnection(conn *websocket.Conn) {
|
||||||
if msg.MessageID == 0 {
|
if msg.MessageID == 0 {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
clientChan <- msg
|
select {
|
||||||
|
case clientChan <- msg:
|
||||||
|
case <-stoppedChan:
|
||||||
|
close(errorChan)
|
||||||
|
close(clientChan)
|
||||||
|
return
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
_, isClose := err.(*websocket.CloseError)
|
_, isClose := err.(*websocket.CloseError)
|
||||||
|
@ -182,7 +189,7 @@ func HandleSocketConnection(conn *websocket.Conn) {
|
||||||
close(errorChan)
|
close(errorChan)
|
||||||
close(clientChan)
|
close(clientChan)
|
||||||
// exit
|
// exit
|
||||||
}(_errorChan, _clientChan)
|
}(_errorChan, _clientChan, stoppedChan)
|
||||||
|
|
||||||
conn.SetPongHandler(func(pongBody string) error {
|
conn.SetPongHandler(func(pongBody string) error {
|
||||||
client.pingCount = 0
|
client.pingCount = 0
|
||||||
|
@ -244,6 +251,8 @@ RunLoop:
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
|
||||||
|
close(stoppedChan)
|
||||||
|
|
||||||
// Stop getting messages...
|
// Stop getting messages...
|
||||||
UnsubscribeAll(&client)
|
UnsubscribeAll(&client)
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue