package main import ( "encoding/json" "flag" "log" "net/http" "os" "os/signal" "syscall" ) func main() { addr := flag.String("addr", "127.0.0.1:7682", "listen address") secret := flag.String("secret", os.Getenv("MUXTERM_SECRET"), "shared secret (or set MUXTERM_SECRET)") flag.Parse() if *secret == "" { log.Fatal("secret is required: use --secret or set MUXTERM_SECRET") } pool := NewPool() // Graceful shutdown on SIGTERM/SIGINT sig := make(chan os.Signal, 1) signal.Notify(sig, syscall.SIGTERM, syscall.SIGINT) go func() { <-sig pool.CloseAll() os.Exit(0) }() http.HandleFunc("/ws", func(w http.ResponseWriter, r *http.Request) { HandleWebSocket(pool, *secret, w, r) }) http.HandleFunc("/health", func(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "application/json") json.NewEncoder(w).Encode(map[string]string{"status": "ok"}) }) log.Printf("muxterm listening on %s", *addr) if err := http.ListenAndServe(*addr, nil); err != nil { log.Fatal(err) } }