| package main |
|
|
| import ( |
| "context" |
| "log/slog" |
| "os" |
| "os/signal" |
| "syscall" |
| "time" |
|
|
| "github.com/yago-123/peer-hub/pkg/server" |
| "github.com/yago-123/peer-hub/pkg/store" |
| ) |
|
|
| const ( |
| StopServerTimeout = 25 * time.Second |
| ) |
|
|
| func main() { |
| logger := slog.New(slog.NewTextHandler(os.Stdout, nil)) |
|
|
| |
| rendezvousStore := store.NewMemoryStore() |
|
|
| |
| srv := server.New(rendezvousStore) |
|
|
| |
| addr := "0.0.0.0:7860" |
| if err := srv.Start(addr); err != nil { |
| logger.Error("Failed to start rendezvous server", "error", err) |
| return |
| } |
|
|
| logger.Info("Rendezvous server started", "address", addr) |
|
|
| |
| stop := make(chan os.Signal, 1) |
| signal.Notify(stop, syscall.SIGINT, syscall.SIGTERM) |
|
|
| <-stop |
| logger.Info("Shutting down server...") |
|
|
| ctx, cancel := context.WithTimeout(context.Background(), StopServerTimeout) |
| defer cancel() |
|
|
| if err := srv.Stop(ctx); err != nil { |
| logger.Error("Failed to stop rendezvous server", "error", err) |
| return |
| } |
|
|
| logger.Info("Server gracefully stopped") |
| } |
|
|