fix?
This commit is contained in:
parent
2bb00f2d0e
commit
cb1bef27c6
81
main.go
81
main.go
@ -1,11 +1,13 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"context"
|
||||||
"flag"
|
"flag"
|
||||||
"fmt"
|
"fmt"
|
||||||
"net/http"
|
"net/http"
|
||||||
"os"
|
"os"
|
||||||
"os/signal"
|
"os/signal"
|
||||||
|
"time"
|
||||||
|
|
||||||
"github.com/gorilla/sessions"
|
"github.com/gorilla/sessions"
|
||||||
"github.com/nareix/joy4/format"
|
"github.com/nareix/joy4/format"
|
||||||
@ -20,11 +22,12 @@ var (
|
|||||||
sKey string
|
sKey string
|
||||||
stats = newStreamStats()
|
stats = newStreamStats()
|
||||||
sAdminPass string
|
sAdminPass string
|
||||||
|
confFile string
|
||||||
)
|
)
|
||||||
|
|
||||||
func setupSettings() error {
|
func setupSettings() error {
|
||||||
var err error
|
var err error
|
||||||
settings, err = LoadSettings("settings.json")
|
settings, err = LoadSettings(confFile)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("Unable to load settings: %s", err)
|
return fmt.Errorf("Unable to load settings: %s", err)
|
||||||
}
|
}
|
||||||
@ -53,6 +56,7 @@ func main() {
|
|||||||
flag.StringVar(&sKey, "k", "", "Stream key, to protect your stream")
|
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.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.BoolVar(&pullEmotes, "e", false, "Pull emotes")
|
||||||
|
flag.StringVar(&confFile, "f", "./settings.json", "URI of the conf file")
|
||||||
flag.Parse()
|
flag.Parse()
|
||||||
|
|
||||||
format.RegisterAll()
|
format.RegisterAll()
|
||||||
@ -109,47 +113,64 @@ func main() {
|
|||||||
common.LogInfoln("RoomAccess: ", settings.RoomAccess)
|
common.LogInfoln("RoomAccess: ", settings.RoomAccess)
|
||||||
common.LogInfoln("RoomAccessPin: ", settings.RoomAccessPin)
|
common.LogInfoln("RoomAccessPin: ", settings.RoomAccessPin)
|
||||||
|
|
||||||
go startServer()
|
rtmpServer := &rtmp.Server{
|
||||||
go startRmtpServer()
|
|
||||||
|
|
||||||
<-exit
|
|
||||||
}
|
|
||||||
|
|
||||||
func startRmtpServer() {
|
|
||||||
server := &rtmp.Server{
|
|
||||||
HandlePlay: handlePlay,
|
HandlePlay: handlePlay,
|
||||||
HandlePublish: handlePublish,
|
HandlePublish: handlePublish,
|
||||||
Addr: rtmpAddr,
|
Addr: rtmpAddr,
|
||||||
}
|
}
|
||||||
err := server.ListenAndServe()
|
|
||||||
|
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,
|
||||||
|
}
|
||||||
|
|
||||||
|
// RTMP Server
|
||||||
|
go func() {
|
||||||
|
err := rtmpServer.ListenAndServe()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
// If the server cannot start, don't pretend we can continue.
|
// If the server cannot start, don't pretend we can continue.
|
||||||
panic("Error trying to start rtmp server: " + err.Error())
|
panic("Error trying to start rtmp server: " + err.Error())
|
||||||
}
|
}
|
||||||
}
|
}()
|
||||||
|
|
||||||
func startServer() {
|
// HTTP Server
|
||||||
// Chat websocket
|
go func() {
|
||||||
http.HandleFunc("/ws", wsHandler)
|
err := httpServer.ListenAndServe()
|
||||||
http.HandleFunc("/static/js/", wsStaticFiles)
|
if err != nil && err != http.ErrServerClosed {
|
||||||
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.HandleFunc("/", handleDefault)
|
|
||||||
|
|
||||||
err := http.ListenAndServe(addr, nil)
|
|
||||||
if err != nil {
|
|
||||||
// If the server cannot start, don't pretend we can continue.
|
// If the server cannot start, don't pretend we can continue.
|
||||||
panic("Error trying to start chat/http server: " + err.Error())
|
panic("Error trying to start chat/http server: " + err.Error())
|
||||||
}
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
|
<-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())
|
||||||
|
}
|
||||||
|
|
||||||
|
// 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) {
|
func handleInterrupt(exit chan bool) {
|
||||||
|
Loading…
Reference in New Issue
Block a user