WebSocketServer/modules/structs/socket.go

78 lines
1.7 KiB
Go

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
}