qcc/cmd/qccd/server.go
2026-06-30 12:52:09 +03:00

55 lines
1.1 KiB
Go

package qccd
import (
"context"
"fmt"
"os"
"os/signal"
"syscall"
"github.com/niko/qcc/internal/config"
"github.com/niko/qcc/internal/server"
"github.com/spf13/cobra"
"go.uber.org/zap"
)
var serverCmd = &cobra.Command{
Use: "server",
Short: "Start QuiC Call server",
Run: runServer,
}
func runServer(cmd *cobra.Command, args []string) {
logger, _ := zap.NewProduction()
defer logger.Sync()
cfg := config.Load()
srv, err := server.New(cfg, logger)
if err != nil {
logger.Fatal("Failed to create server", zap.Error(err))
}
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
sigCh := make(chan os.Signal, 1)
signal.Notify(sigCh, syscall.SIGINT, syscall.SIGTERM)
go func() {
sig := <-sigCh
logger.Info("Received signal, shutting down", zap.String("signal", sig.String()))
cancel()
}()
logger.Info("Starting server",
zap.String("listen", cfg.Server.Listen),
zap.Strings("domains", cfg.ACME.Domains),
)
if err := srv.Start(ctx); err != nil {
logger.Fatal("Server error", zap.Error(err))
}
fmt.Println("Server stopped gracefully")
}