|
|
|
@ -81,31 +81,33 @@ func (ws *wsconn) Write(b []byte) (n int, err error) {
|
|
|
|
|
ws.wlock.Lock()
|
|
|
|
|
|
|
|
|
|
if ws.connClosing {
|
|
|
|
|
|
|
|
|
|
return 0, io.EOF
|
|
|
|
|
}
|
|
|
|
|
writeWs := func(b []byte) (n int, err error) {
|
|
|
|
|
wr, err := ws.wsc.NextWriter(websocket.BinaryMessage)
|
|
|
|
|
if err != nil {
|
|
|
|
|
log.Warning("WS transport: ws connection NewFrameReader return " + err.Error())
|
|
|
|
|
ws.connClosing = true
|
|
|
|
|
ws.Close()
|
|
|
|
|
return 0, err
|
|
|
|
|
}
|
|
|
|
|
n, err = wr.Write(b)
|
|
|
|
|
if err != nil {
|
|
|
|
|
return 0, err
|
|
|
|
|
}
|
|
|
|
|
err = wr.Close()
|
|
|
|
|
if err != nil {
|
|
|
|
|
return 0, err
|
|
|
|
|
}
|
|
|
|
|
return n, err
|
|
|
|
|
}
|
|
|
|
|
n, err = writeWs(b)
|
|
|
|
|
|
|
|
|
|
n, err = ws.write(b)
|
|
|
|
|
ws.wlock.Unlock()
|
|
|
|
|
return n, err
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (ws *wsconn) write(b []byte) (n int, err error) {
|
|
|
|
|
wr, err := ws.wsc.NextWriter(websocket.BinaryMessage)
|
|
|
|
|
if err != nil {
|
|
|
|
|
log.Warning("WS transport: ws connection NewFrameReader return " + err.Error())
|
|
|
|
|
ws.connClosing = true
|
|
|
|
|
ws.Close()
|
|
|
|
|
return 0, err
|
|
|
|
|
}
|
|
|
|
|
n, err = wr.Write(b)
|
|
|
|
|
if err != nil {
|
|
|
|
|
return 0, err
|
|
|
|
|
}
|
|
|
|
|
err = wr.Close()
|
|
|
|
|
if err != nil {
|
|
|
|
|
return 0, err
|
|
|
|
|
}
|
|
|
|
|
return n, err
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (ws *wsconn) Close() error {
|
|
|
|
|
ws.connClosing = true
|
|
|
|
|
ws.wlock.Lock()
|
|
|
|
|