chat: use cobra

Kim committed Oct 21, 2025 at 17:47 UTC f0019dd02f6d1a04971ad2452b5292e4c2d695d4
2 files changed +17 -16
cmd/example_chat/main.go
+17 -11
@@ -2,7 +2,6 @@ package main
2
3 import (
4 "context"
5 - "flag"
5 "fmt"
6 "net"
7 "net/http"
@@ -13,30 +12,37 @@ import (
12
13 "github.com/gosuda/relaydns/relaydns"
14 "github.com/rs/zerolog/log"
15 + "github.com/spf13/cobra"
16 )
17
18 +var rootCmd = &cobra.Command{
19 + Use: "relaydns-chat",
20 + Short: "RelayDNS demo chat (local HTTP backend + libp2p advertiser)",
21 + RunE: runChat,
22 +}
23 +
24 var (
25 flagServerURL string
20 - flagBootstraps relaydns.StringSlice
26 + flagBootstraps []string
27 flagAddr string
28 flagName string
29 )
30
31 func init() {
26 - flag.StringVar(&flagServerURL, "server-url", "http://localhost:8080", "relayserver base URL to fetch multiaddrs from /health")
27 - flag.Var(&flagBootstraps, "bootstrap", "multiaddr with /p2p/ (repeat). supports /dnsaddr/")
28 - flag.StringVar(&flagAddr, "addr", ":8091", "local chat HTTP listen address")
29 - flag.StringVar(&flagName, "name", "demo-chat", "backend display name")
32 + flags := rootCmd.PersistentFlags()
33 + flags.StringVar(&flagServerURL, "server-url", "http://localhost:8080", "relayserver base URL to auto-fetch multiaddrs from /health")
34 + flags.StringSliceVar(&flagBootstraps, "bootstrap", nil, "multiaddrs with /p2p/ (supports /dnsaddr/ that resolves to /p2p/)")
35 + flags.StringVar(&flagAddr, "addr", ":8091", "local chat HTTP listen address")
36 + flags.StringVar(&flagName, "name", "demo-chat", "backend display name")
37 }
38
39 func main() {
33 - flag.Parse()
34 - if err := run(); err != nil {
35 - log.Fatal().Err(err).Msg("example_chat")
40 + if err := rootCmd.Execute(); err != nil {
41 + log.Fatal().Err(err).Msg("execute chat command")
42 }
43 }
44
39 -func run() error {
45 +func runChat(cmd *cobra.Command, args []string) error {
46 ctx, cancel := context.WithCancel(context.Background())
47 defer cancel()
48
@@ -83,7 +89,7 @@ func run() error {
89 sig := make(chan os.Signal, 1)
90 signal.Notify(sig, syscall.SIGINT, syscall.SIGTERM)
91 <-sig
86 - cancel()
92 + log.Info().Msg("[chat] shutting down")
93 shutCtx, cancelFn := context.WithTimeout(context.Background(), 2*time.Second)
94 _ = srv.Shutdown(shutCtx)
95 cancelFn()
relaydns/utils.go
-5
@@ -13,11 +13,6 @@ import (
13 "github.com/libp2p/go-libp2p/core/host"
14 )
15
16 -type StringSlice []string
17 -
18 -func (s *StringSlice) String() string { return fmt.Sprint([]string(*s)) }
19 -func (s *StringSlice) Set(v string) error { *s = append(*s, v); return nil }
20 -
16 func AddrToTarget(listen string) string {
17 if len(listen) > 0 && listen[0] == ':' {
18 return "127.0.0.1" + listen