102 lines
2.1 KiB
Go
102 lines
2.1 KiB
Go
package main
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"os"
|
|
"os/signal"
|
|
|
|
"github.com/urfave/cli/v2"
|
|
"github.uio.no/torjus/dogtamer"
|
|
"github.uio.no/torjus/dogtamer/server"
|
|
"go.uber.org/zap"
|
|
"go.uber.org/zap/zapcore"
|
|
)
|
|
|
|
const (
|
|
ExitSuccess = 0
|
|
ExitGenericError = 1
|
|
)
|
|
|
|
func main() {
|
|
cli.VersionPrinter = func(c *cli.Context) {
|
|
fmt.Println(dogtamer.GetVersion())
|
|
}
|
|
|
|
app := &cli.App{
|
|
Name: "dogtamer",
|
|
Version: dogtamer.Version,
|
|
Authors: []*cli.Author{
|
|
{
|
|
Name: "Torjus Håkestad",
|
|
Email: "torjus@usit.uio.no",
|
|
},
|
|
},
|
|
Flags: []cli.Flag{
|
|
&cli.StringFlag{
|
|
Name: "config",
|
|
Usage: "Path to config-file",
|
|
Aliases: []string{"c"},
|
|
},
|
|
},
|
|
Commands: []*cli.Command{
|
|
{
|
|
Name: "serve",
|
|
Usage: "Start dogtamer server",
|
|
Action: ActionServe,
|
|
},
|
|
},
|
|
}
|
|
err := app.Run(os.Args)
|
|
if err != nil {
|
|
fmt.Printf("Error: %s\n", err)
|
|
os.Exit(ExitGenericError)
|
|
}
|
|
}
|
|
|
|
func ActionServe(c *cli.Context) error {
|
|
|
|
ctx, cancel := context.WithCancel(context.Background())
|
|
s := server.NewRTMPServer(ctx, ":5566")
|
|
logger := setupServerLogger()
|
|
s.Logger = logger
|
|
|
|
// Listen for SIGINT
|
|
sigChan := make(chan os.Signal, 1)
|
|
signal.Notify(sigChan, os.Interrupt)
|
|
go func() {
|
|
<-sigChan
|
|
s.Logger.Info("Got shutdown signal.")
|
|
cancel()
|
|
}()
|
|
|
|
if err := s.Listen(); err != nil {
|
|
return cli.Exit(err, ExitGenericError)
|
|
}
|
|
s.Logger.Info("Server shut down.")
|
|
return nil
|
|
}
|
|
|
|
func setupServerLogger() *zap.SugaredLogger {
|
|
logEncoderConfig := zap.NewProductionEncoderConfig()
|
|
logEncoderConfig.EncodeCaller = zapcore.ShortCallerEncoder
|
|
logEncoderConfig.EncodeLevel = zapcore.CapitalColorLevelEncoder
|
|
logEncoderConfig.EncodeTime = zapcore.ISO8601TimeEncoder
|
|
logEncoderConfig.EncodeDuration = zapcore.StringDurationEncoder
|
|
|
|
rootLoggerConfig := &zap.Config{
|
|
Level: zap.NewAtomicLevelAt(zap.InfoLevel),
|
|
OutputPaths: []string{"stdout"},
|
|
ErrorOutputPaths: []string{"stdout"},
|
|
Encoding: "console",
|
|
EncoderConfig: logEncoderConfig,
|
|
}
|
|
|
|
rootLogger, err := rootLoggerConfig.Build()
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
return rootLogger.Named("RTMP").WithOptions().Sugar()
|
|
}
|