3
3
const multiaddr = require ( 'multiaddr' )
4
4
const Libp2pNode = require ( 'libp2p-ipfs' ) . Node
5
5
const promisify = require ( 'promisify-es6' )
6
+ const flatMap = require ( 'lodash.flatmap' )
6
7
7
8
const OFFLINE_ERROR = require ( '../utils' ) . OFFLINE_ERROR
8
9
@@ -11,21 +12,27 @@ module.exports = function libp2p (self) {
11
12
12
13
return {
13
14
start : ( callback ) => {
14
- self . _libp2pNode = new Libp2pNode ( self . _peerInfo )
15
- self . _libp2pNode . start ( ( ) => {
16
- // TODO connect to bootstrap nodes, it will get us more addrs
17
- self . _libp2pNode . peerInfo . multiaddrs . forEach ( ( ma ) => {
15
+ const node = self . _libp2pNode = new Libp2pNode ( self . _peerInfo )
16
+ node . start ( ( err ) => {
17
+ if ( err ) {
18
+ return callback ( err )
19
+ }
20
+
21
+ // TODO: connect to bootstrap nodes, it will
22
+ // get us more addrs
23
+ node . peerInfo . multiaddrs . forEach ( ( ma ) => {
18
24
console . log ( 'Swarm listening on' , ma . toString ( ) )
19
25
} )
20
26
callback ( )
21
27
} )
22
28
23
- self . _libp2pNode . discovery . on ( 'peer' , ( peerInfo ) => {
24
- self . _libp2pNode . peerBook . put ( peerInfo )
25
- self . _libp2pNode . dialByPeerInfo ( peerInfo , ( ) => { } )
29
+ node . discovery . on ( 'peer' , ( peerInfo ) => {
30
+ node . peerBook . put ( peerInfo )
31
+ node . dialByPeerInfo ( peerInfo , ( ) => { } )
26
32
} )
27
- self . _libp2pNode . swarm . on ( 'peer-mux-established' , ( peerInfo ) => {
28
- self . _libp2pNode . peerBook . put ( peerInfo )
33
+
34
+ node . swarm . on ( 'peer-mux-established' , ( peerInfo ) => {
35
+ node . peerBook . put ( peerInfo )
29
36
} )
30
37
} ,
31
38
stop : ( callback ) => {
@@ -37,35 +44,16 @@ module.exports = function libp2p (self) {
37
44
return callback ( OFFLINE_ERROR )
38
45
}
39
46
40
- const peers = self . _libp2pNode . peerBook . getAll ( )
41
- const mas = [ ]
42
- Object
43
- . keys ( peers )
44
- . forEach ( ( b58Id ) => {
45
- peers [ b58Id ] . multiaddrs . forEach ( ( ma ) => {
46
- // TODO this should only print the addr we are using
47
- mas . push ( ma )
48
- } )
49
- } )
50
-
47
+ const mas = collectAddrs ( self . _libp2pNode . peerBook )
51
48
callback ( null , mas )
52
49
} ) ,
53
50
// all the addrs we know
54
51
addrs : promisify ( ( callback ) => {
55
52
if ( ! self . isOnline ( ) ) {
56
53
return callback ( OFFLINE_ERROR )
57
54
}
58
- const peers = self . _libp2pNode . peerBook . getAll ( )
59
- const mas = [ ]
60
- Object
61
- . keys ( peers )
62
- . forEach ( ( b58Id ) => {
63
- peers [ b58Id ] . multiaddrs . forEach ( ( ma ) => {
64
- // TODO this should only print the addr we are using
65
- mas . push ( ma )
66
- } )
67
- } )
68
55
56
+ const mas = collectAddrs ( self . _libp2pNode . peerBook )
69
57
callback ( null , mas )
70
58
} ) ,
71
59
localAddrs : promisify ( ( callback ) => {
@@ -109,3 +97,10 @@ module.exports = function libp2p (self) {
109
97
}
110
98
}
111
99
}
100
+
101
+ function collectAddrs ( book ) {
102
+ const peers = book . getAll ( )
103
+ return flatMap ( Object . keys ( peers ) , ( id ) => {
104
+ return peers [ id ] . multiaddrs
105
+ } )
106
+ }
0 commit comments