Unverified 提交 958483f6 作者: Whyrusleeping 提交者: GitHub

Merge pull request #4822 from ipfs/fix/emit-once

fix: use EmitOnce where only single response is to be sent
...@@ -71,7 +71,7 @@ func CommandsCmd(root *cmds.Command) *cmds.Command { ...@@ -71,7 +71,7 @@ func CommandsCmd(root *cmds.Command) *cmds.Command {
Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) { Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) {
rootCmd := cmd2outputCmd("ipfs", root) rootCmd := cmd2outputCmd("ipfs", root)
rootCmd.showOpts, _ = req.Options[flagsOptionName].(bool) rootCmd.showOpts, _ = req.Options[flagsOptionName].(bool)
err := res.Emit(&rootCmd) err := cmds.EmitOnce(res, &rootCmd)
if err != nil { if err != nil {
log.Error(err) log.Error(err)
} }
......
...@@ -151,7 +151,7 @@ var filesStatCmd = &cmds.Command{ ...@@ -151,7 +151,7 @@ var filesStatCmd = &cmds.Command{
} }
if !withLocal { if !withLocal {
res.Emit(o) cmds.EmitOnce(res, o)
return return
} }
...@@ -161,7 +161,7 @@ var filesStatCmd = &cmds.Command{ ...@@ -161,7 +161,7 @@ var filesStatCmd = &cmds.Command{
o.Local = local o.Local = local
o.SizeLocal = sizeLocal o.SizeLocal = sizeLocal
res.Emit(o) cmds.EmitOnce(res, o)
}, },
Encoders: cmds.EncoderMap{ Encoders: cmds.EncoderMap{
cmds.Text: cmds.MakeEncoder(func(req *cmds.Request, w io.Writer, v interface{}) error { cmds.Text: cmds.MakeEncoder(func(req *cmds.Request, w io.Writer, v interface{}) error {
......
...@@ -6,10 +6,12 @@ import ( ...@@ -6,10 +6,12 @@ import (
"fmt" "fmt"
"io" "io"
"net/http" "net/http"
"sort"
"sync" "sync"
"time" "time"
core "github.com/ipfs/go-ipfs/core" core "github.com/ipfs/go-ipfs/core"
e "github.com/ipfs/go-ipfs/core/commands/e"
floodsub "gx/ipfs/QmSFihvoND3eDaAYRCeLgLPt62yCPgMZs1NSZmKFEtJQQw/go-libp2p-floodsub" floodsub "gx/ipfs/QmSFihvoND3eDaAYRCeLgLPt62yCPgMZs1NSZmKFEtJQQw/go-libp2p-floodsub"
pstore "gx/ipfs/QmXauCuJzmzapetmC6W4TuDJLL1yFFrVzSHoWv8YdbmnxH/go-libp2p-peerstore" pstore "gx/ipfs/QmXauCuJzmzapetmC6W4TuDJLL1yFFrVzSHoWv8YdbmnxH/go-libp2p-peerstore"
...@@ -268,11 +270,26 @@ To use, the daemon must be run with '--enable-pubsub-experiment'. ...@@ -268,11 +270,26 @@ To use, the daemon must be run with '--enable-pubsub-experiment'.
return return
} }
for _, topic := range n.Floodsub.GetTopics() { cmds.EmitOnce(res, stringList{n.Floodsub.GetTopics()})
res.Emit(topic) },
} Type: stringList{},
Encoders: cmds.EncoderMap{
cmds.Text: cmds.MakeEncoder(stringListEncoder),
}, },
Type: "", }
func stringListEncoder(req *cmds.Request, w io.Writer, v interface{}) error {
list, ok := v.(*stringList)
if !ok {
return e.TypeErr(list, v)
}
for _, str := range list.Strings {
_, err := fmt.Fprintf(w, "%s\n", str)
if err != nil {
return err
}
}
return nil
} }
var PubsubPeersCmd = &cmds.Command{ var PubsubPeersCmd = &cmds.Command{
...@@ -315,12 +332,17 @@ To use, the daemon must be run with '--enable-pubsub-experiment'. ...@@ -315,12 +332,17 @@ To use, the daemon must be run with '--enable-pubsub-experiment'.
topic = req.Arguments[0] topic = req.Arguments[0]
} }
for _, peer := range n.Floodsub.ListPeers(topic) { peers := n.Floodsub.ListPeers(topic)
res.Emit(peer.Pretty()) list := &stringList{make([]string, 0, len(peers))}
for _, peer := range peers {
list.Strings = append(list.Strings, peer.Pretty())
} }
sort.Strings(list.Strings)
cmds.EmitOnce(res, list)
}, },
Type: "", Type: stringList{},
Encoders: cmds.EncoderMap{ Encoders: cmds.EncoderMap{
cmds.Text: cmds.Encoders[cmds.TextNewline], cmds.Text: cmds.MakeEncoder(stringListEncoder),
}, },
} }
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论