moq-rs/server/main.go

86 lines
1.7 KiB
Go
Raw Normal View History

2022-06-29 16:17:02 +00:00
package main
import (
"bufio"
"context"
"crypto/tls"
2022-06-29 16:17:02 +00:00
"errors"
"flag"
"fmt"
"log"
"os"
"strings"
"github.com/alta/insecure"
2022-06-29 16:17:02 +00:00
"github.com/kixelated/invoker"
"github.com/kixelated/warp-demo/server/internal/warp"
2022-06-29 16:17:02 +00:00
)
func main() {
err := run(context.Background())
if err == nil {
return
}
log.Println(err)
var errPanic invoker.ErrPanic
// TODO use an interface
if errors.As(err, &errPanic) {
stack := string(errPanic.Stack())
scanner := bufio.NewScanner(strings.NewReader(stack))
for scanner.Scan() {
log.Println(scanner.Text())
}
}
os.Exit(1)
}
func run(ctx context.Context) (err error) {
addr := flag.String("addr", "127.0.0.1:4443", "HTTPS server address")
cert := flag.String("tls-cert", "", "TLS certificate file path")
key := flag.String("tls-key", "", "TLS certificate file path")
2022-06-29 16:17:02 +00:00
logDir := flag.String("log-dir", "", "logs will be written to the provided directory")
dash := flag.String("dash", "../media/fragmented.mpd", "DASH playlist path")
flag.Parse()
media, err := warp.NewMedia(*dash)
if err != nil {
return fmt.Errorf("failed to open media: %w", err)
}
var tlsCert tls.Certificate
if *cert != "" && *key != "" {
tlsCert, err = tls.LoadX509KeyPair(*cert, *key)
if err != nil {
return fmt.Errorf("failed to load TLS certificate: %w", err)
}
} else {
tlsCert, err = insecure.Cert()
if err != nil {
return fmt.Errorf("failed to create insecure cert: %w", err)
}
}
2022-06-29 16:17:02 +00:00
config := warp.ServerConfig{
Addr: *addr,
Cert: &tlsCert,
LogDir: *logDir,
2022-06-29 16:17:02 +00:00
}
ws, err := warp.NewServer(config, media)
if err != nil {
return fmt.Errorf("failed to create warp server: %w", err)
}
log.Printf("listening on %s", *addr)
return invoker.Run(ctx, invoker.Interrupt, ws.Run)
}