1package main
 2
 3import (
 4	"context"
 5	"log"
 6	"os"
 7	"os/signal"
 8	"syscall"
 9	"time"
10
11	"github.com/charmbracelet/soft-serve/config"
12	"github.com/charmbracelet/soft-serve/server"
13	"github.com/spf13/cobra"
14)
15
16var (
17	serveCmd = &cobra.Command{
18		Use:   "serve",
19		Short: "Start the server",
20		Long:  "Start the server",
21		Args:  cobra.NoArgs,
22		RunE: func(cmd *cobra.Command, args []string) error {
23			cfg := config.DefaultConfig()
24			s := server.NewServer(cfg)
25
26			done := make(chan os.Signal, 1)
27			signal.Notify(done, os.Interrupt, syscall.SIGINT, syscall.SIGTERM)
28
29			log.Printf("Starting SSH server on %s:%d", cfg.BindAddr, cfg.Port)
30			go func() {
31				if err := s.Start(); err != nil {
32					log.Fatalln(err)
33				}
34			}()
35
36			<-done
37
38			log.Printf("Stopping SSH server on %s:%d", cfg.BindAddr, cfg.Port)
39			ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
40			defer func() { cancel() }()
41			return s.Shutdown(ctx)
42		},
43	}
44)