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:
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user