websocket-relay/main.go
savinmax e4523df602
Some checks failed
CI / test (push) Successful in 1m10s
CI / lint (push) Successful in 30s
Release / release (push) Failing after 31s
Init
2025-08-02 18:33:50 +02:00

44 lines
1.0 KiB
Go

package main
import (
"fmt"
"log"
"net/http"
"github.com/prometheus/client_golang/prometheus/promhttp"
"websocket-relay/internal/config"
"websocket-relay/internal/hub"
)
func main() {
cfg, err := config.Load("config.yaml")
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))
}
}