mirror of
https://github.com/jwetzell/showbridge-go.git
synced 2026-04-26 12:55:29 +00:00
43 lines
906 B
Go
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)
|
|
}
|
|
}
|
|
}
|