Files
showbridge-go/events.go
2026-03-11 20:58:53 -05:00

43 lines
906 B
Go

package showbridge
import (
"encoding/json"
"github.com/gorilla/websocket"
)
type Event struct {
Type string `json:"type"`
Data any `json:"data,omitempty"`
Error string `json:"error,omitempty"`
}
func (e Event) toJSON() ([]byte, error) {
return json.Marshal(e)
}
func (r *Router) handleEvent(event Event) {
switch event.Type {
case "ping":
r.broadcastEvent(Event{Type: "pong"})
default:
r.logger.Warn("unknown event type", "eventType", event.Type)
}
}
func (r *Router) broadcastEvent(event Event) {
eventJSON, err := event.toJSON()
if err != nil {
r.logger.Error("failed to marshal event to JSON", "error", err)
return
}
r.wsConnsMu.Lock()
defer r.wsConnsMu.Unlock()
for _, conn := range r.wsConns {
err := conn.WriteMessage(websocket.TextMessage, eventJSON)
if err != nil {
r.logger.Error("failed to write message to websocket connection", "error", err)
}
}
}