Skip to content

Commit

Permalink
refactor: examples/discovery-mechanisms (#498)
Browse files Browse the repository at this point in the history
* refactor: examples-discovery-mechanisms

* chore: apply suggestions from code review

Co-Authored-By: Jacob Heun <jacobheun@gmail.com>

* chore: suggestion interval

Co-Authored-By: Jacob Heun <jacobheun@gmail.com>

* chore: add peer connected event

Co-authored-by: Jacob Heun <jacobheun@gmail.com>
  • Loading branch information
vasco-santos and jacobheun committed Jan 6, 2020
1 parent a1717da commit f182f5b
Show file tree
Hide file tree
Showing 3 changed files with 122 additions and 180 deletions.
63 changes: 22 additions & 41 deletions examples/discovery-mechanisms/1.js
Original file line number Diff line number Diff line change
@@ -1,14 +1,11 @@
/* eslint-disable no-console */
'use strict'

const libp2p = require('../../')
const Libp2p = require('../../')
const TCP = require('libp2p-tcp')
const Mplex = require('libp2p-mplex')
const SECIO = require('libp2p-secio')
const PeerInfo = require('peer-info')
const Bootstrap = require('libp2p-bootstrap')
const waterfall = require('async/waterfall')
const defaultsDeep = require('@nodeutils/defaults-deep')

// Find this list at: https://github.com/ipfs/js-ipfs/blob/master/src/core/runtime/config-nodejs.json
const bootstrapers = [
Expand All @@ -23,51 +20,35 @@ const bootstrapers = [
'/ip4/104.236.151.122/tcp/4001/p2p/QmSoLju6m7xTh3DuokvT3886QRYqxAzb1kShaanJgW36yx'
]

class MyBundle extends libp2p {
constructor (_options) {
const defaults = {
modules: {
transport: [ TCP ],
streamMuxer: [ Mplex ],
connEncryption: [ SECIO ],
peerDiscovery: [ Bootstrap ]
},
config: {
peerDiscovery: {
autoDial: true,
bootstrap: {
interval: 20e3,
enabled: true,
list: bootstrapers
}
;(async () => {
const node = await Libp2p.create({
modules: {
transport: [TCP],
streamMuxer: [Mplex],
connEncryption: [SECIO],
peerDiscovery: [Bootstrap]
},
config: {
peerDiscovery: {
bootstrap: {
interval: 60e3,
enabled: true,
list: bootstrapers
}
}
}
})

super(defaultsDeep(_options, defaults))
}
}

let node
node.peerInfo.multiaddrs.add('/ip4/0.0.0.0/tcp/0')

waterfall([
(cb) => PeerInfo.create(cb),
(peerInfo, cb) => {
peerInfo.multiaddrs.add('/ip4/0.0.0.0/tcp/0')
node = new MyBundle({
peerInfo
})
node.start(cb)
}
], (err) => {
if (err) { throw err }
node.on('peer:connect', (peer) => {
console.log('Connection established to:', peer.id.toB58String()) // Emitted when a peer has been found
})

node.on('peer:discovery', (peer) => {
// No need to dial, autoDial is on
console.log('Discovered:', peer.id.toB58String())
})

node.on('peer:connect', (peer) => {
console.log('Connection established to:', peer.id.toB58String())
})
})
await node.start()
})();
74 changes: 28 additions & 46 deletions examples/discovery-mechanisms/2.js
Original file line number Diff line number Diff line change
@@ -1,63 +1,45 @@
/* eslint-disable no-console */
'use strict'

const libp2p = require('../../')
const Libp2p = require('../../')
const TCP = require('libp2p-tcp')
const Mplex = require('libp2p-mplex')
const SECIO = require('libp2p-secio')
const PeerInfo = require('peer-info')
const MulticastDNS = require('libp2p-mdns')
const waterfall = require('async/waterfall')
const parallel = require('async/parallel')
const defaultsDeep = require('@nodeutils/defaults-deep')

class MyBundle extends libp2p {
constructor (_options) {
const defaults = {
modules: {
transport: [ TCP ],
streamMuxer: [ Mplex ],
connEncryption: [ SECIO ],
peerDiscovery: [ MulticastDNS ]
},
config: {
peerDiscovery: {
mdns: {
interval: 20e3,
enabled: true
}
const createNode = async () => {
const node = await Libp2p.create({
modules: {
transport: [TCP],
streamMuxer: [Mplex],
connEncryption: [SECIO],
peerDiscovery: [MulticastDNS]
},
config: {
peerDiscovery: {
mdns: {
interval: 20e3,
enabled: true
}
}
}
})
node.peerInfo.multiaddrs.add('/ip4/0.0.0.0/tcp/0')

super(defaultsDeep(_options, defaults))
}
return node
}

function createNode (callback) {
let node

waterfall([
(cb) => PeerInfo.create(cb),
(peerInfo, cb) => {
peerInfo.multiaddrs.add('/ip4/0.0.0.0/tcp/0')
node = new MyBundle({
peerInfo
})
node.start(cb)
}
], (err) => callback(err, node))
}

parallel([
(cb) => createNode(cb),
(cb) => createNode(cb)
], (err, nodes) => {
if (err) { throw err }

const node1 = nodes[0]
const node2 = nodes[1]
;(async () => {
const [node1, node2] = await Promise.all([
createNode(),
createNode()
])

node1.on('peer:discovery', (peer) => console.log('Discovered:', peer.id.toB58String()))
node2.on('peer:discovery', (peer) => console.log('Discovered:', peer.id.toB58String()))
})

await Promise.all([
node1.start(),
node2.start()
])
})();
Loading

0 comments on commit f182f5b

Please sign in to comment.