Skip to content

Commit

Permalink
Fix error due to closed discovery channel.
Browse files Browse the repository at this point in the history
  • Loading branch information
lthibault committed Jun 6, 2022
1 parent a2c25e5 commit 7ed02a8
Show file tree
Hide file tree
Showing 5 changed files with 55 additions and 35 deletions.
2 changes: 0 additions & 2 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -1156,8 +1156,6 @@ github.com/wangjia184/sortedset v0.0.0-20160527075905-f5d03557ba30/go.mod h1:Yko
github.com/warpfork/go-testmark v0.3.0/go.mod h1:jhEf8FVxd+F17juRubpmut64NEG6I2rgkUhlcqqXwE0=
github.com/warpfork/go-wish v0.0.0-20200122115046-b9ea61034e4a h1:G++j5e0OC488te356JvdhaM8YS6nMsjLAYF7JxCv07w=
github.com/warpfork/go-wish v0.0.0-20200122115046-b9ea61034e4a/go.mod h1:x6AKhvSSexNrVSrViXSHUEbICjmGXhtgABaHIySUSGw=
github.com/wetware/casm v0.0.0-20220512172652-17b91add6bac h1:rJWzpDzccchJUCnRRP3RQGHrHGHD71Ty77zMldY64Ww=
github.com/wetware/casm v0.0.0-20220512172652-17b91add6bac/go.mod h1:/hPIOdeX+Pnfn6PwHXvT3DTxMovLBY/4+diXleCY9/s=
github.com/wetware/casm v0.0.0-20220526201835-0f6ca66923d5 h1:yRT6iHjOedGAtIEFwSdR/kcrGIfGMf+rzEMwMKg1cqo=
github.com/wetware/casm v0.0.0-20220526201835-0f6ca66923d5/go.mod h1:/hPIOdeX+Pnfn6PwHXvT3DTxMovLBY/4+diXleCY9/s=
github.com/whyrusleeping/go-keyspace v0.0.0-20160322163242-5b898ac5add1 h1:EKhdznlJHPMoKr0XTrX+IlJs1LH3lyx2nfr1dOlZ79k=
Expand Down
3 changes: 0 additions & 3 deletions internal/cmd/client/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -45,8 +45,5 @@ func Command() *cli.Command {
},
},
Subcommands: subcommands,

Before: setup(),
After: teardown(),
}
}
79 changes: 49 additions & 30 deletions internal/cmd/client/discover.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,14 @@ import (
"time"

"github.com/libp2p/go-libp2p"
"github.com/libp2p/go-libp2p-core/discovery"
"github.com/libp2p/go-libp2p-core/peer"
libp2pquic "github.com/libp2p/go-libp2p-quic-transport"
"github.com/multiformats/go-multiaddr"
"github.com/urfave/cli/v2"
"github.com/wetware/casm/pkg/boot/socket"
bootutil "github.com/wetware/casm/pkg/boot/util"
logutil "github.com/wetware/ww/internal/util/log"
)

func Discover() *cli.Command {
Expand Down Expand Up @@ -45,6 +48,9 @@ func Discover() *cli.Command {
}

func discover(c *cli.Context) error {
logger = logutil.New(c).
WithField("limit", c.Int("num"))

h, err := libp2p.New(
libp2p.NoTransports,
libp2p.NoListenAddrs,
Expand All @@ -53,55 +59,68 @@ func discover(c *cli.Context) error {
return err
}

discoverer, err := bootutil.DialString(h, c.String("discover"))
discoverer, err := bootutil.DialString(h, c.String("discover"),
socket.WithLogger(logger))
if err != nil {
return err
}

ctx, cancel := context.WithTimeout(c.Context, time.Duration(c.Duration("timeout")))
ctx, cancel := context.WithTimeout(c.Context, c.Duration("timeout"))
defer cancel()

infos, err := discoverer.FindPeers(ctx, c.String("ns"))
infos, err := discoverer.FindPeers(ctx, c.String("ns"),
discovery.Limit(c.Int("num")))
if err != nil {
return err
}

discovered := make([]peer.AddrInfo, 0, c.Int("num"))
for i := 0; i < c.Int("num"); i++ {
select {
case info := <-infos:
err := setP2pAddress(info)
if err != nil {
for info := range infos {
as, err := peer.AddrInfoToP2pAddrs(&info)
if err != nil {
return err
}

print := printer(c)
for _, addr := range as {
if err = print(addr); err != nil {
return err
}
discovered = append(discovered, info)
case <-ctx.Done():
}
}

// print results
return ctx.Err()
}

func printer(c *cli.Context) func(multiaddr.Multiaddr) error {
if c.Bool("json") {
jsonOutput, err := json.Marshal(discovered)
if err != nil {
return nil
}
fmt.Println(string(jsonOutput))
} else {
for _, info := range discovered {
fmt.Println(info.String())
}
return jsonPrinter(c)
}

return ctx.Err()
return textPrinter(c)
}

func setP2pAddress(info peer.AddrInfo) error {
for i := range info.Addrs {
maddr, err := multiaddr.NewMultiaddr(fmt.Sprintf("/p2p/%s", info.ID.String()))
if err != nil {
return err
}
info.Addrs[i] = info.Addrs[i].Encapsulate(maddr)
func jsonPrinter(c *cli.Context) func(multiaddr.Multiaddr) error {
enc := json.NewEncoder(c.App.Writer)

return func(maddr multiaddr.Multiaddr) error {
return enc.Encode(maddr)
}
return nil
}

func textPrinter(c *cli.Context) func(multiaddr.Multiaddr) error {
return func(maddr multiaddr.Multiaddr) error {
_, err := fmt.Fprintln(c.App.Writer, maddr)
return err
}
}

// func setP2pAddress(info peer.AddrInfo) error {
// for i := range info.Addrs {
// maddr, err := multiaddr.NewMultiaddr(fmt.Sprintf("/p2p/%s", info.ID.String()))
// if err != nil {
// return err
// }
// info.Addrs[i] = info.Addrs[i].Encapsulate(maddr)
// }
// return nil
// }
2 changes: 2 additions & 0 deletions internal/cmd/client/ls.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@ func Ls() *cli.Command {
EnvVars: []string{"OUTPUT_JSON"},
},
},
Before: setup(),
After: teardown(),
Action: ls(),
}
}
Expand Down
4 changes: 4 additions & 0 deletions internal/cmd/client/pubsub.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@ func Publish() *cli.Command {
Required: true,
},
},
Before: setup(),
After: teardown(),
Action: publish(),
}
}
Expand All @@ -42,6 +44,8 @@ func Subscribe() *cli.Command {
Usage: "format output as hex",
},
},
Before: setup(),
After: teardown(),
Action: subscribe(),
}
}
Expand Down

0 comments on commit 7ed02a8

Please sign in to comment.