mirror of
https://github.com/jech/galene.git
synced 2024-11-26 02:25:58 +01:00
Fix error handling at websocket close.
This commit is contained in:
parent
26e6ecc3bc
commit
e8c732c54c
1 changed files with 13 additions and 11 deletions
|
@ -657,13 +657,13 @@ func readMessage(conn *websocket.Conn, m *clientMessage) error {
|
||||||
return conn.ReadJSON(&m)
|
return conn.ReadJSON(&m)
|
||||||
}
|
}
|
||||||
|
|
||||||
func StartClient(conn *websocket.Conn) error {
|
func StartClient(conn *websocket.Conn) (err error) {
|
||||||
var m clientMessage
|
var m clientMessage
|
||||||
|
|
||||||
err := readMessage(conn, &m)
|
err = readMessage(conn, &m)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
conn.Close()
|
conn.Close()
|
||||||
return err
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if m.Type != "handshake" {
|
if m.Type != "handshake" {
|
||||||
|
@ -674,7 +674,8 @@ func StartClient(conn *websocket.Conn) error {
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
conn.Close()
|
conn.Close()
|
||||||
return group.ProtocolError("client didn't handshake")
|
err = group.ProtocolError("client didn't handshake")
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
c := &webClient{
|
c := &webClient{
|
||||||
|
@ -689,13 +690,14 @@ func StartClient(conn *websocket.Conn) error {
|
||||||
c.writerDone = make(chan struct{})
|
c.writerDone = make(chan struct{})
|
||||||
go clientWriter(conn, c.writeCh, c.writerDone)
|
go clientWriter(conn, c.writeCh, c.writerDone)
|
||||||
defer func() {
|
defer func() {
|
||||||
var e []byte
|
m, e := errorToWSCloseMessage(c.id, err)
|
||||||
if !isWSNormalError(err) {
|
if isWSNormalError(err) {
|
||||||
var m *clientMessage
|
err = nil
|
||||||
m, e = errorToWSCloseMessage(c.id, err)
|
} else if _, ok := err.(group.KickError); ok {
|
||||||
if m != nil {
|
err = nil
|
||||||
c.write(*m)
|
}
|
||||||
}
|
if m != nil {
|
||||||
|
c.write(*m)
|
||||||
}
|
}
|
||||||
c.close(e)
|
c.close(e)
|
||||||
}()
|
}()
|
||||||
|
|
Loading…
Reference in a new issue