Add various features

* HTTP Server
* Config files
This commit is contained in:
2021-09-02 02:49:11 +02:00
parent 1d6e4270ba
commit 80acc281b9
10 changed files with 153 additions and 55 deletions

View File

@@ -9,6 +9,7 @@ import (
"github.com/urfave/cli/v2"
"github.uio.no/torjus/dogtamer"
"github.uio.no/torjus/dogtamer/config"
"github.uio.no/torjus/dogtamer/server"
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
@@ -56,35 +57,51 @@ func main() {
}
func ActionServe(c *cli.Context) error {
logger := setupServerLogger()
cfg, err := config.FromDefaultLocations()
if err != nil {
logger.Warn("No config file found.")
}
ctx, cancel := context.WithCancel(context.Background())
// Setup rtmp server
s := server.NewRTMPServer(ctx, ":5566")
logger := setupServerLogger()
// Setup RTMP-server
s := server.NewRTMPServer(ctx, cfg.RTMPListenAddr)
s.Logger = logger
// Setup web server
ws := server.NewWebServer(ctx, s)
go func() {
s.Logger.Info("Starting web server")
err := ws.Serve()
if err != nil && err != http.ErrServerClosed {
s.Logger.Infow("Web server shut down with error", "err", err)
}
}()
// Setup web-server
webDone := make(chan struct{})
if cfg.HTTPServerEnable {
ws := server.NewWebServer(ctx, s)
ws.ListenAddr = cfg.HTTPListenAddr
ws.Logger = logger
go func() {
s.Logger.Info("Starting web-server.")
err := ws.Serve()
if err != nil && err != http.ErrServerClosed {
s.Logger.Infow("Web server shut down with error.", "err", err)
}
close(webDone)
}()
} else {
close(webDone)
}
// Listen for SIGINT
sigChan := make(chan os.Signal, 1)
signal.Notify(sigChan, os.Interrupt)
go func() {
<-sigChan
s.Logger.Info("Got shutdown signal.")
s.Logger.Debug("Got shutdown signal.")
cancel()
}()
// Start RTMP-server
s.Logger.Info("Starting RTMP-server.")
if err := s.Listen(); err != nil {
return cli.Exit(err, ExitGenericError)
}
// Wait for webserver to exit, if started
<-webDone
s.Logger.Info("Server shut down.")
return nil
}
@@ -97,7 +114,7 @@ func setupServerLogger() *zap.SugaredLogger {
logEncoderConfig.EncodeDuration = zapcore.StringDurationEncoder
rootLoggerConfig := &zap.Config{
Level: zap.NewAtomicLevelAt(zap.InfoLevel),
Level: zap.NewAtomicLevelAt(zap.DebugLevel),
OutputPaths: []string{"stdout"},
ErrorOutputPaths: []string{"stdout"},
Encoding: "console",