playback-device-server/server/webrtc_ws_handler.go

51 lines
1.3 KiB
Go

package server
import (
"encoding/json"
"github.com/gorilla/websocket"
"github.com/rs/zerolog/log"
)
const TYPE_SIGNALING = "signaling"
type WebRTCWSHandler struct {
}
func (h *WebRTCWSHandler) Handle(messageObject map[string]any, senderId string, sockets map[string]*websocket.Conn) {
if _, ok := messageObject["type"]; !ok {
return
}
messageType := messageObject["type"]
switch messageType {
case TYPE_SIGNALING:
target, ok := messageObject["target"].(string)
if !ok {
log.Error().Msgf("Invalid target in signaling message")
return
}
message := messageObject["message"]
h.handleSignaling(target, message, senderId, sockets)
}
}
func (h *WebRTCWSHandler) handleSignaling(target string, message any, senderId string, sockets map[string]*websocket.Conn) {
ws, ok := sockets[target]
if !ok {
log.Error().Msgf("No connection found for target %s", target)
return
}
byteArray, err := json.Marshal(map[string]any{"sender": senderId, "message": message})
if err != nil {
log.Error().Msgf("Error marshaling signaling message: %s", err)
return
}
log.Info().Str("target", target).Str("sender", senderId).Msg("sending signaling message to target")
err = ws.WriteMessage(websocket.TextMessage, byteArray)
if err != nil {
log.Error().Msgf("Error writing signaling message to target: %s", err)
return
}
}