websocket-relay/main.go
savinmax 9ad38190a5
All checks were successful
Release / release (push) Successful in 19s
CI / test (push) Successful in 9s
CI / lint (push) Successful in 12s
adding config-file arg
2025-08-02 21:31:35 +02:00

48 lines
1.1 KiB
Go

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))
}
}