package websocket import ( "encoding/json" "strings" "sync" "github.com/gorilla/websocket" ) type WebSocket struct { id string ws WebSocketHandler connection *websocket.Conn mu sync.Mutex } func (socket *WebSocket) Address() *string { remote := socket.connection.RemoteAddr() address := strings.SplitN(remote.String(), ":", -1) if len(address[0]) < 1 { return nil } return &address[0] } func (socket *WebSocket) Send(v interface{}) error { socket.mu.Lock() defer socket.mu.Unlock() if socket.connection == nil { return nil } raw, err := json.Marshal(v) if err != nil { return err } socket.ws.logger.Debug(). Str("session", socket.id). Str("address", socket.connection.RemoteAddr().String()). Str("raw", string(raw)). Msg("sending message to client") return socket.connection.WriteMessage(websocket.TextMessage, raw) } func (socket *WebSocket) Destroy() error { if socket.connection == nil { return nil } return socket.connection.Close() }