代码拉取完成,页面将自动刷新
package ws
import (
"errors"
"io"
"time"
"gitee.com/fast_api/api/def"
"gitee.com/fast_api/api/log"
"github.com/gorilla/websocket"
)
var (
_ io.ReadWriter = (*WSCtx)(nil)
pongWait = 60 * time.Second
)
type WSCtx struct {
serialize def.Serialize
conn *websocket.Conn
label string
}
func NewWSCtx(conn *websocket.Conn) *WSCtx {
x := &WSCtx{serialize: def.DefaultContext.Serialize, conn: conn}
x.init()
return x
}
// Read implements io.ReadWriter. only support BinaryMessage
func (ws *WSCtx) Read(p []byte) (n int, err error) {
typ, reader, err := ws.conn.NextReader()
if err != nil {
return 0, err
}
if typ == websocket.BinaryMessage {
return reader.Read(p)
}
return 0, errors.New("websocket type err")
}
// Write implements io.ReadWriter. only support BinaryMessage
func (ws *WSCtx) Write(p []byte) (n int, err error) {
writer, err := ws.conn.NextWriter(websocket.BinaryMessage)
if err != nil {
return 0, err
}
return writer.Write(p)
}
func (ws *WSCtx) SetSerialize(serialize def.Serialize) {
ws.serialize = serialize
}
// Receive This method will clog up
func (ws *WSCtx) Receive(f func(messageType int, p []byte)) {
for {
mt, message, err := ws.conn.ReadMessage()
if err != nil {
break
}
f(mt, message)
}
}
// Send Use the default serialize send
func (ws *WSCtx) Send(o any) {
context := ws.serialize.Encode(o)
ws.conn.WriteMessage(websocket.BinaryMessage, context.Bytes)
}
func (ws *WSCtx) WriteJSON(o any) {
ws.conn.WriteJSON(o)
}
func (ws *WSCtx) SetWsLabel(label string) *WSCtx {
setWs(label, ws)
ws.label = label
return ws
}
func (ws *WSCtx) init() {
ws.conn.SetPongHandler(func(string) error {
ws.conn.SetReadDeadline(time.Now().Add(pongWait))
return nil
})
ws.conn.SetCloseHandler(func(code int, text string) error {
log.Debug(code, text)
delete(cPool, ws.label)
return nil
})
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。