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