fix commands interface
Jeromy committed
Jan 24, 2015 at 08:06 UTC
20c40c3f104298c4ff43a19a5d00261ef3444733
1 file changed
+23
-14
core/commands/dht.go
+23
-14
@@ -41,15 +41,17 @@ var queryDhtCmd = &cmds.Command{
41
Options: []cmds.Option{
42
cmds.BoolOption("verbose", "v", "Write extra information"),
43
},
44
- Run: func(req cmds.Request) (interface{}, error) {
44
+ Run: func(req cmds.Request, res cmds.Response) {
45
n, err := req.Context().GetNode()
46
if err != nil {
47
- return nil, err
47
+ res.SetError(err, cmds.ErrNormal)
48
+ return
49
}
50
51
dht, ok := n.Routing.(*ipdht.IpfsDHT)
52
if !ok {
52
- return nil, errors.New("Routing service was not a dht")
53
+ res.SetError(ErrNotDHT, cmds.ErrNormal)
54
+ return
55
}
56
57
events := make(chan *notif.QueryEvent)
@@ -68,13 +70,14 @@ var queryDhtCmd = &cmds.Command{
70
}()
71
72
outChan := make(chan interface{})
73
+ res.SetOutput((<-chan interface{})(outChan))
74
+
75
go func() {
76
defer close(outChan)
77
for e := range events {
78
outChan <- e
79
}
80
}()
77
- return outChan, nil
81
},
82
Marshalers: cmds.MarshalerMap{
83
cmds.Text: func(res cmds.Response) (io.Reader, error) {
@@ -141,20 +144,24 @@ FindProviders will return a list of peers who are able to provide the value requ
144
Options: []cmds.Option{
145
cmds.BoolOption("verbose", "v", "Write extra information"),
146
},
144
- Run: func(req cmds.Request) (interface{}, error) {
147
+ Run: func(req cmds.Request, res cmds.Response) {
148
n, err := req.Context().GetNode()
149
if err != nil {
147
- return nil, err
150
+ res.SetError(err, cmds.ErrNormal)
151
+ return
152
}
153
154
dht, ok := n.Routing.(*ipdht.IpfsDHT)
155
if !ok {
152
- return nil, ErrNotDHT
156
+ res.SetError(ErrNotDHT, cmds.ErrNormal)
157
+ return
158
}
159
160
numProviders := 20
161
162
outChan := make(chan interface{})
163
+ res.SetOutput((<-chan interface{})(outChan))
164
+
165
events := make(chan *notif.QueryEvent)
166
ctx := notif.RegisterForQueryEvents(req.Context().Context, events)
167
@@ -176,7 +183,6 @@ FindProviders will return a list of peers who are able to provide the value requ
183
})
184
}
185
}()
179
- return outChan, nil
186
},
187
Marshalers: cmds.MarshalerMap{
188
cmds.Text: func(res cmds.Response) (io.Reader, error) {
@@ -242,23 +248,28 @@ var findPeerDhtCmd = &cmds.Command{
248
Arguments: []cmds.Argument{
249
cmds.StringArg("peerID", true, true, "The peer to search for"),
250
},
245
- Run: func(req cmds.Request) (interface{}, error) {
251
+ Run: func(req cmds.Request, res cmds.Response) {
252
n, err := req.Context().GetNode()
253
if err != nil {
248
- return nil, err
254
+ res.SetError(err, cmds.ErrNormal)
255
+ return
256
}
257
258
dht, ok := n.Routing.(*ipdht.IpfsDHT)
259
if !ok {
253
- return nil, ErrNotDHT
260
+ res.SetError(ErrNotDHT, cmds.ErrNormal)
261
+ return
262
}
263
264
pid, err := peer.IDB58Decode(req.Arguments()[0])
265
if err != nil {
258
- return nil, err
266
+ res.SetError(err, cmds.ErrNormal)
267
+ return
268
}
269
270
outChan := make(chan interface{})
271
+ res.SetOutput((<-chan interface{})(outChan))
272
+
273
events := make(chan *notif.QueryEvent)
274
ctx := notif.RegisterForQueryEvents(req.Context().Context, events)
275
@@ -285,8 +296,6 @@ var findPeerDhtCmd = &cmds.Command{
296
Responses: []*peer.PeerInfo{&pi},
297
})
298
}()
288
-
289
- return outChan, nil
299
},
300
Marshalers: cmds.MarshalerMap{
301
cmds.Text: func(res cmds.Response) (io.Reader, error) {