package main import ( "flag" "fmt" "log" "net/http" "github.com/prometheus/client_golang/prometheus/promhttp" "websocket-relay/internal/config" "websocket-relay/internal/hub" ) func main() { configFile := flag.String("config-file", "config.yaml", "Path to configuration file") flag.Parse() cfg, err := config.Load(*configFile) if err != nil { log.Fatal("Failed to load config:", err) } h := hub.New() go h.Run() // Start metrics server if enabled if cfg.Metrics.Enabled { go func() { metricsAddr := fmt.Sprintf(":%d", cfg.Metrics.Port) log.Printf("Metrics server starting on %s", metricsAddr) http.Handle("/metrics", promhttp.Handler()) log.Fatal(http.ListenAndServe(metricsAddr, nil)) }() } mux := http.NewServeMux() mux.HandleFunc("/ws", h.HandleWebSocket) addr := fmt.Sprintf(":%d", cfg.Server.Port) if cfg.Server.TLS.Enabled { log.Printf("WebSocket relay server starting on %s (TLS)", addr) log.Fatal(http.ListenAndServeTLS(addr, cfg.Server.TLS.CertFile, cfg.Server.TLS.KeyFile, mux)) } else { log.Printf("WebSocket relay server starting on %s (HTTP)", addr) log.Fatal(http.ListenAndServe(addr, mux)) } }