package main import ( "embed" "flag" "log" "net/http" ) //go:embed static/index.html var staticFiles embed.FS func main() { streamerAddr := flag.String("streamer", "127.0.0.1:44500", "MARTe2 UDP streamer address (host:port)") listenAddr := flag.String("listen", ":8080", "HTTP listen address") clientPort := flag.Int("clientport", 44900, "Local UDP port to bind for streamer data") flag.Parse() hub := NewHub() go hub.Run() udpClient := NewUDPClient(*streamerAddr, *clientPort, hub) go udpClient.Run() // Serve the embedded index.html at /. http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { if r.URL.Path != "/" { http.NotFound(w, r) return } data, err := staticFiles.ReadFile("static/index.html") if err != nil { http.Error(w, "index.html not found", http.StatusInternalServerError) return } w.Header().Set("Content-Type", "text/html; charset=utf-8") w.Write(data) }) http.HandleFunc("/ws", hub.HandleWebSocket) log.Printf("WebUI listening on %s (streamer=%s, local UDP port=%d)", *listenAddr, *streamerAddr, *clientPort) if err := http.ListenAndServe(*listenAddr, nil); err != nil { log.Fatalf("http: %v", err) } }