start work on http/ws api

This commit is contained in:
Joel Wetzell
2026-03-11 20:58:53 -05:00
parent 82ba1d5d10
commit 0f57e123ce
7 changed files with 212 additions and 8 deletions

42
events.go Normal file
View File

@@ -0,0 +1,42 @@
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)
}
}
}