gotty/server/ws_wrapper.go
Xiaoguang Sun 01668a5425 Read all payloads from reader at once
Reader might return before finish reading all pending bytes. This might
cause event handling to fail randomly.

Signed-off-by: Xiaoguang Sun <sunxiaoguang@gmail.com>
2022-09-15 12:54:45 +08:00

34 lines
564 B
Go

package server
import (
"github.com/gorilla/websocket"
)
type wsWrapper struct {
*websocket.Conn
}
func (wsw *wsWrapper) Write(p []byte) (n int, err error) {
writer, err := wsw.Conn.NextWriter(websocket.TextMessage)
if err != nil {
return 0, err
}
defer writer.Close()
return writer.Write(p)
}
func (wsw *wsWrapper) Read(p []byte) (n int, err error) {
for {
msgType, bytes, err := wsw.Conn.ReadMessage()
if err != nil {
return 0, err
}
if msgType != websocket.TextMessage {
continue
}
copy(p, bytes)
return len(bytes), err
}
}