package structs import ( "context" "encoding/json" "errors" "sync" "clickandjoin.app/websocketserver/modules/utils" gocnjhelper "git.clickandjoin.umbach.dev/ClickandJoin/go-cnj-helper" "github.com/gofiber/websocket/v2" ) type SocketClient struct { UserId string Conn *websocket.Conn connMu sync.Mutex RabbitMqQueueName string RabbitMqConsumerId string CancelFunc context.CancelFunc } type SocketMessage struct { Conn *websocket.Conn Msg []byte } func (socketClient *SocketClient) SendCloseMessage() error { return socketClient.writeMessage(websocket.CloseMessage, SendSocketMessage{}, true) } func (socketClient *SocketClient) SendMessage(message SendSocketMessage) error { return socketClient.writeMessage(websocket.TextMessage, message, false) } func (socketClient *SocketClient) writeMessage(messageType int, message SendSocketMessage, closeMessage bool) error { var marshaledMessage []byte var err error if closeMessage { marshaledMessage = websocket.FormatCloseMessage(utils.WsCloseCodeNewConnectionWasMade, "") } else { marshaledMessage, err = json.Marshal(message) if err != nil { gocnjhelper.LogErrorf("Failed to marshal ws message, err: %s", err) return err } } socketClient.connMu.Lock() defer socketClient.connMu.Unlock() if socketClient.Conn == nil { gocnjhelper.LogError("Failed to ws message because conn is nil") return errors.New("ws client conn is nil") } err = socketClient.Conn.WriteMessage(messageType, marshaledMessage) if err != nil { gocnjhelper.LogErrorf("Failed to write ws message, err: %s", err) return err } return nil } type SendSocketMessage struct { Cmd int Body any } type SocketMessageTest struct { Cmd int Body string }