package ws import ( "sync" "time" "github.com/gorilla/websocket" ) type SafeConn struct { conn *websocket.Conn mu sync.Mutex } func NewSafeConn(conn *websocket.Conn) *SafeConn { return &SafeConn{ conn: conn, mu: sync.Mutex{}, } } func (sc *SafeConn) WriteMessage(messageType int, data []byte) error { sc.mu.Lock() defer sc.mu.Unlock() return sc.conn.WriteMessage(messageType, data) } func (sc *SafeConn) WriteJSON(v interface{}) error { sc.mu.Lock() defer sc.mu.Unlock() return sc.conn.WriteJSON(v) } func (sc *SafeConn) Close() error { sc.mu.Lock() defer sc.mu.Unlock() return sc.conn.Close() } func (sc *SafeConn) ReadMessage() (int, []byte, error) { // sc.mu.Lock() // defer sc.mu.Unlock() return sc.conn.ReadMessage() } func (sc *SafeConn) ReadJSON(v interface{}) error { // sc.mu.Lock() // defer sc.mu.Unlock() return sc.conn.ReadJSON(v) } func (sc *SafeConn) SetReadDeadline(t time.Time) error { // sc.mu.Lock() // defer sc.mu.Unlock() return sc.conn.SetReadDeadline(t) } func (sc *SafeConn) GetConn() *websocket.Conn { sc.mu.Lock() defer sc.mu.Unlock() return sc.conn }