diff --git a/main.go b/main.go index 36f73b4..3dfeeac 100644 --- a/main.go +++ b/main.go @@ -1,13 +1,11 @@ package main import ( - "context" "flag" "fmt" "net/http" "os" "os/signal" - "time" "github.com/gorilla/sessions" "github.com/nareix/joy4/format" @@ -22,12 +20,11 @@ var ( sKey string stats = newStreamStats() sAdminPass string - confFile string ) func setupSettings() error { var err error - settings, err = LoadSettings(confFile) + settings, err = LoadSettings("settings.json") if err != nil { return fmt.Errorf("Unable to load settings: %s", err) } @@ -56,7 +53,6 @@ func main() { flag.StringVar(&sKey, "k", "", "Stream key, to protect your stream") flag.StringVar(&sAdminPass, "a", "", "Set admin password. Overrides configuration in settings.json. This will not write the password to settings.json.") flag.BoolVar(&pullEmotes, "e", false, "Pull emotes") - flag.StringVar(&confFile, "f", "./settings.json", "URI of the conf file") flag.Parse() format.RegisterAll() @@ -113,64 +109,47 @@ func main() { common.LogInfoln("RoomAccess: ", settings.RoomAccess) common.LogInfoln("RoomAccessPin: ", settings.RoomAccessPin) - rtmpServer := &rtmp.Server{ + go startServer() + go startRmtpServer() + + <-exit +} + +func startRmtpServer() { + server := &rtmp.Server{ HandlePlay: handlePlay, HandlePublish: handlePublish, Addr: rtmpAddr, } - - router := http.NewServeMux() - - router.HandleFunc("/ws", wsHandler) // Chat websocket - router.HandleFunc("/static/js/", wsStaticFiles) - router.HandleFunc("/static/css/", wsStaticFiles) - router.HandleFunc("/static/img/", wsImages) - router.HandleFunc("/static/main.wasm", wsWasmFile) - router.HandleFunc("/emotes/", wsEmotes) - router.HandleFunc("/favicon.ico", wsStaticFiles) - router.HandleFunc("/chat", handleIndexTemplate) - router.HandleFunc("/video", handleIndexTemplate) - router.HandleFunc("/help", handleHelpTemplate) - router.HandleFunc("/emotes", handleEmoteTemplate) - - router.HandleFunc("/live", handleLive) - router.HandleFunc("/", handleDefault) - - httpServer := &http.Server{ - Addr: addr, - Handler: router, + err := server.ListenAndServe() + if err != nil { + // If the server cannot start, don't pretend we can continue. + panic("Error trying to start rtmp server: " + err.Error()) } +} - // RTMP Server - go func() { - err := rtmpServer.ListenAndServe() - if err != nil { - // If the server cannot start, don't pretend we can continue. - panic("Error trying to start rtmp server: " + err.Error()) - } - }() +func startServer() { + // Chat websocket + http.HandleFunc("/ws", wsHandler) + http.HandleFunc("/static/js/", wsStaticFiles) + http.HandleFunc("/static/css/", wsStaticFiles) + http.HandleFunc("/static/img/", wsImages) + http.HandleFunc("/static/main.wasm", wsWasmFile) + http.HandleFunc("/emotes/", wsEmotes) + http.HandleFunc("/favicon.ico", wsStaticFiles) + http.HandleFunc("/chat", handleIndexTemplate) + http.HandleFunc("/video", handleIndexTemplate) + http.HandleFunc("/help", handleHelpTemplate) + http.HandleFunc("/pin", handlePin) + http.HandleFunc("/emotes", handleEmoteTemplate) - // HTTP Server - go func() { - err := httpServer.ListenAndServe() - if err != nil && err != http.ErrServerClosed { - // If the server cannot start, don't pretend we can continue. - panic("Error trying to start chat/http server: " + err.Error()) - } - }() + http.HandleFunc("/", handleDefault) - <-exit - - ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) - defer cancel() - - if err := httpServer.Shutdown(ctx); err != nil && err != http.ErrServerClosed { - panic("Gracefull HTTP server shutdown failed: " + err.Error()) + err := http.ListenAndServe(addr, nil) + if err != nil { + // If the server cannot start, don't pretend we can continue. + panic("Error trying to start chat/http server: " + err.Error()) } - - // I don't think the RTMP server can be shutdown cleanly. Apparently the author - // of joy4 want's everyone to use joy5, but that one doesn't seem to allow clean - // shutdowns either? Idk, the documentation on joy4 and joy5 are non-existent. } func handleInterrupt(exit chan bool) {