提交 76dc6f56 作者: Steven Allen

commands(dht): make it possible to return errors from printEvent

License: MIT
Signed-off-by: 's avatarSteven Allen <steven@stebalien.com>
上级 dd16b3ca
......@@ -104,15 +104,15 @@ var queryDhtCmd = &cmds.Command{
Encoders: cmds.EncoderMap{
cmds.Text: cmds.MakeTypedEncoder(func(req *cmds.Request, w io.Writer, out *notif.QueryEvent) error {
pfm := pfuncMap{
notif.PeerResponse: func(obj *notif.QueryEvent, out io.Writer, verbose bool) {
notif.PeerResponse: func(obj *notif.QueryEvent, out io.Writer, verbose bool) error {
for _, p := range obj.Responses {
fmt.Fprintf(out, "%s\n", p.ID.Pretty())
}
return nil
},
}
verbose, _ := req.Options[dhtVerboseOptionName].(bool)
printEvent(out, w, verbose, pfm)
return nil
return printEvent(out, w, verbose, pfm)
}),
},
Type: notif.QueryEvent{},
......@@ -182,12 +182,13 @@ var findProvidersDhtCmd = &cmds.Command{
Encoders: cmds.EncoderMap{
cmds.Text: cmds.MakeTypedEncoder(func(req *cmds.Request, w io.Writer, out *notif.QueryEvent) error {
pfm := pfuncMap{
notif.FinalPeer: func(obj *notif.QueryEvent, out io.Writer, verbose bool) {
notif.FinalPeer: func(obj *notif.QueryEvent, out io.Writer, verbose bool) error {
if verbose {
fmt.Fprintf(out, "* closest peer %s\n", obj.ID)
}
return nil
},
notif.Provider: func(obj *notif.QueryEvent, out io.Writer, verbose bool) {
notif.Provider: func(obj *notif.QueryEvent, out io.Writer, verbose bool) error {
prov := obj.Responses[0]
if verbose {
fmt.Fprintf(out, "provider: ")
......@@ -198,13 +199,12 @@ var findProvidersDhtCmd = &cmds.Command{
fmt.Fprintf(out, "\t%s\n", a)
}
}
return nil
},
}
verbose, _ := req.Options[dhtVerboseOptionName].(bool)
printEvent(out, w, verbose, pfm)
return nil
return printEvent(out, w, verbose, pfm)
}),
},
Type: notif.QueryEvent{},
......@@ -291,17 +291,16 @@ var provideRefDhtCmd = &cmds.Command{
Encoders: cmds.EncoderMap{
cmds.Text: cmds.MakeTypedEncoder(func(req *cmds.Request, w io.Writer, out *notif.QueryEvent) error {
pfm := pfuncMap{
notif.FinalPeer: func(obj *notif.QueryEvent, out io.Writer, verbose bool) {
notif.FinalPeer: func(obj *notif.QueryEvent, out io.Writer, verbose bool) error {
if verbose {
fmt.Fprintf(out, "sending provider record to peer %s\n", obj.ID)
}
return nil
},
}
verbose, _ := req.Options[dhtVerboseOptionName].(bool)
printEvent(out, w, verbose, pfm)
return nil
return printEvent(out, w, verbose, pfm)
}),
},
Type: notif.QueryEvent{},
......@@ -403,17 +402,17 @@ var findPeerDhtCmd = &cmds.Command{
Encoders: cmds.EncoderMap{
cmds.Text: cmds.MakeTypedEncoder(func(req *cmds.Request, w io.Writer, out *notif.QueryEvent) error {
pfm := pfuncMap{
notif.FinalPeer: func(obj *notif.QueryEvent, out io.Writer, verbose bool) {
notif.FinalPeer: func(obj *notif.QueryEvent, out io.Writer, verbose bool) error {
pi := obj.Responses[0]
for _, a := range pi.Addrs {
fmt.Fprintf(out, "%s\n", a)
}
return nil
},
}
verbose, _ := req.Options[dhtVerboseOptionName].(bool)
printEvent(out, w, verbose, pfm)
return nil
return printEvent(out, w, verbose, pfm)
}),
},
Type: notif.QueryEvent{},
......@@ -486,19 +485,18 @@ Different key types can specify other 'best' rules.
Encoders: cmds.EncoderMap{
cmds.Text: cmds.MakeTypedEncoder(func(req *cmds.Request, w io.Writer, out *notif.QueryEvent) error {
pfm := pfuncMap{
notif.Value: func(obj *notif.QueryEvent, out io.Writer, verbose bool) {
notif.Value: func(obj *notif.QueryEvent, out io.Writer, verbose bool) error {
if verbose {
fmt.Fprintf(out, "got value: '%s'\n", obj.Extra)
} else {
fmt.Fprintln(out, obj.Extra)
}
return nil
},
}
verbose, _ := req.Options[dhtVerboseOptionName].(bool)
printEvent(out, w, verbose, pfm)
return nil
return printEvent(out, w, verbose, pfm)
}),
},
Type: notif.QueryEvent{},
......@@ -576,38 +574,37 @@ NOTE: A value may not exceed 2048 bytes.
Encoders: cmds.EncoderMap{
cmds.Text: cmds.MakeTypedEncoder(func(req *cmds.Request, w io.Writer, out *notif.QueryEvent) error {
pfm := pfuncMap{
notif.FinalPeer: func(obj *notif.QueryEvent, out io.Writer, verbose bool) {
notif.FinalPeer: func(obj *notif.QueryEvent, out io.Writer, verbose bool) error {
if verbose {
fmt.Fprintf(out, "* closest peer %s\n", obj.ID)
}
return nil
},
notif.Value: func(obj *notif.QueryEvent, out io.Writer, verbose bool) {
notif.Value: func(obj *notif.QueryEvent, out io.Writer, verbose bool) error {
fmt.Fprintf(out, "%s\n", obj.ID.Pretty())
return nil
},
}
verbose, _ := req.Options[dhtVerboseOptionName].(bool)
printEvent(out, w, verbose, pfm)
return nil
return printEvent(out, w, verbose, pfm)
}),
},
Type: notif.QueryEvent{},
}
type printFunc func(obj *notif.QueryEvent, out io.Writer, verbose bool)
type printFunc func(obj *notif.QueryEvent, out io.Writer, verbose bool) error
type pfuncMap map[notif.QueryEventType]printFunc
func printEvent(obj *notif.QueryEvent, out io.Writer, verbose bool, override pfuncMap) {
func printEvent(obj *notif.QueryEvent, out io.Writer, verbose bool, override pfuncMap) error {
if verbose {
fmt.Fprintf(out, "%s: ", time.Now().Format("15:04:05.000"))
}
if override != nil {
if pf, ok := override[obj.Type]; ok {
pf(obj, out, verbose)
return
return pf(obj, out, verbose)
}
}
......@@ -648,6 +645,7 @@ func printEvent(obj *notif.QueryEvent, out io.Writer, verbose bool, override pfu
fmt.Fprintf(out, "unrecognized event type: %d\n", obj.Type)
}
}
return nil
}
func escapeDhtKey(s string) (string, error) {
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论