Websocket fixes (#461)

* Bump api spec version

* Do not panic on cpu monitoring error

* Centralize the socket disconnect logic and fire it also when socket errors occur. Hopefully closes #421
This commit is contained in:
Gabe Kangas
2020-12-21 19:42:47 -08:00
committed by GitHub
parent eab45c7e92
commit e558c549d7
4 changed files with 41 additions and 15 deletions

View File

@@ -72,7 +72,7 @@ func (c *Client) Write(msg models.ChatMessage) {
select {
case c.ch <- msg:
default:
_server.remove(c)
_server.removeClient(c)
_server.err(fmt.Errorf("client %s is disconnected", c.ClientID))
}
}
@@ -96,28 +96,33 @@ func (c *Client) listenWrite() {
case msg := <-c.pingch:
err := websocket.JSON.Send(c.ws, msg)
if err != nil {
log.Errorln(err)
c.handleClientSocketError(err)
}
// send message to the client
case msg := <-c.ch:
err := websocket.JSON.Send(c.ws, msg)
if err != nil {
log.Errorln(err)
c.handleClientSocketError(err)
}
case msg := <-c.usernameChangeChannel:
err := websocket.JSON.Send(c.ws, msg)
if err != nil {
log.Errorln(err)
c.handleClientSocketError(err)
}
// receive done request
case <-c.doneCh:
_server.remove(c)
_server.removeClient(c)
c.doneCh <- true // for listenRead method
return
}
}
}
func (c *Client) handleClientSocketError(err error) {
log.Errorln("Websocket client error: ", err.Error())
_server.removeClient(c)
}
// Listen read request via channel.
func (c *Client) listenRead() {
for {
@@ -136,7 +141,7 @@ func (c *Client) listenRead() {
if err == io.EOF {
c.doneCh <- true
} else {
log.Errorln(err)
c.handleClientSocketError(err)
}
return
}