diff --git a/examples/echo/src/dialer.js b/examples/echo/src/dialer.js index e7035011..d2b7cfe7 100644 --- a/examples/echo/src/dialer.js +++ b/examples/echo/src/dialer.js @@ -8,51 +8,54 @@ const PeerId = require('peer-id') const PeerInfo = require('peer-info') const Node = require('./libp2p-bundle') -const pull = require('pull-stream') -const async = require('async') +const pipe = require('it-pipe') -async.parallel([ - (cb) => PeerId.createFromJSON(require('./id-d'), cb), - (cb) => PeerId.createFromJSON(require('./id-l'), cb) -], (err, ids) => { - if (err) { throw err } +async function run() { + const [dialerId, listenerId] = await Promise.all([ + PeerId.createFromJSON(require('./id-d')), + PeerId.createFromJSON(require('./id-l')) + ]) // Dialer - const dialerId = ids[0] const dialerPeerInfo = new PeerInfo(dialerId) dialerPeerInfo.multiaddrs.add('/ip4/0.0.0.0/tcp/0') const dialerNode = new Node({ peerInfo: dialerPeerInfo }) - // Peer to Dial - const listenerPeerInfo = new PeerInfo(ids[1]) - const listenerId = ids[1] + // Peer to Dial (the listener) + const listenerPeerInfo = new PeerInfo(listenerId) const listenerMultiaddr = '/ip4/127.0.0.1/tcp/10333/p2p/' + listenerId.toB58String() listenerPeerInfo.multiaddrs.add(listenerMultiaddr) - dialerNode.start((err) => { - if (err) { throw err } + // Start the dialer libp2p node + await dialerNode.start() - console.log('Dialer ready, listening on:') - dialerPeerInfo.multiaddrs.forEach((ma) => console.log(ma.toString() + - '/p2p/' + dialerId.toB58String())) + console.log('Dialer ready, listening on:') + dialerPeerInfo.multiaddrs.forEach((ma) => console.log(ma.toString() + + '/p2p/' + dialerId.toB58String())) - console.log('Dialing to peer:', listenerMultiaddr.toString()) - dialerNode.dialProtocol(listenerPeerInfo, '/echo/1.0.0', (err, conn) => { - if (err) { throw err } + // Dial the listener node + console.log('Dialing to peer:', listenerMultiaddr.toString()) + const { stream } = await dialerNode.dialProtocol(listenerPeerInfo, '/echo/1.0.0') - console.log('nodeA dialed to nodeB on protocol: /echo/1.0.0') + console.log('nodeA dialed to nodeB on protocol: /echo/1.0.0') - pull( - pull.values(['hey']), - conn, - pull.collect((err, data) => { - if (err) { throw err } - console.log('received echo:', data.toString()) - }) - ) - }) - }) -}) + pipe( + // Source data + ['hey'], + // Write to the stream, and pass its output to the next function + stream, + // Sink function + async function (source) { + // For each chunk of data + for await (const data of source) { + // Output the data + console.log('received echo:', data.toString()) + } + } + ) +} + +run() diff --git a/examples/echo/src/libp2p-bundle.js b/examples/echo/src/libp2p-bundle.js index c45b4cfa..cca65f8f 100644 --- a/examples/echo/src/libp2p-bundle.js +++ b/examples/echo/src/libp2p-bundle.js @@ -1,41 +1,12 @@ 'use strict' const TCP = require('libp2p-tcp') -const MulticastDNS = require('libp2p-mdns') const WS = require('libp2p-websockets') -const Bootstrap = require('libp2p-bootstrap') -const spdy = require('libp2p-spdy') -const KadDHT = require('libp2p-kad-dht') const mplex = require('libp2p-mplex') const secio = require('libp2p-secio') const defaultsDeep = require('@nodeutils/defaults-deep') const libp2p = require('../../..') -function mapMuxers (list) { - return list.map((pref) => { - if (typeof pref !== 'string') { - return pref - } - switch (pref.trim().toLowerCase()) { - case 'spdy': return spdy - case 'mplex': return mplex - default: - throw new Error(pref + ' muxer not available') - } - }) -} - -function getMuxers (muxers) { - const muxerPrefs = process.env.LIBP2P_MUXER - if (muxerPrefs && !muxers) { - return mapMuxers(muxerPrefs.split(',')) - } else if (muxers) { - return mapMuxers(muxers) - } else { - return [mplex, spdy] - } -} - class Node extends libp2p { constructor (_options) { const defaults = { @@ -44,29 +15,8 @@ class Node extends libp2p { TCP, WS ], - streamMuxer: getMuxers(_options.muxer), - connEncryption: [ secio ], - peerDiscovery: [ - MulticastDNS, - Bootstrap - ], - dht: KadDHT - }, - config: { - peerDiscovery: { - mdns: { - interval: 10000, - enabled: false - }, - bootstrap: { - interval: 10000, - enabled: false, - list: _options.bootstrapList - } - }, - dht: { - kBucketSize: 20 - } + streamMuxer: [ mplex ], + connEncryption: [ secio ] } } diff --git a/examples/echo/src/listener.js b/examples/echo/src/listener.js index 10546ec3..476ca7e2 100644 --- a/examples/echo/src/listener.js +++ b/examples/echo/src/listener.js @@ -8,39 +8,34 @@ const PeerId = require('peer-id') const PeerInfo = require('peer-info') const Node = require('./libp2p-bundle') -const pull = require('pull-stream') -const series = require('async/series') +const pipe = require('it-pipe') -let listenerId -let listenerNode +async function run() { + const listenerId = await PeerId.createFromJSON(require('./id-l')) -series([ - (cb) => { - PeerId.createFromJSON(require('./id-l'), (err, id) => { - if (err) { return cb(err) } - listenerId = id - cb() - }) - }, - (cb) => { - const listenerPeerInfo = new PeerInfo(listenerId) - listenerPeerInfo.multiaddrs.add('/ip4/0.0.0.0/tcp/10333') - listenerNode = new Node({ - peerInfo: listenerPeerInfo - }) + // Listener libp2p node + const listenerPeerInfo = new PeerInfo(listenerId) + listenerPeerInfo.multiaddrs.add('/ip4/0.0.0.0/tcp/10333') + const listenerNode = new Node({ + peerInfo: listenerPeerInfo + }) - listenerNode.on('peer:connect', (peerInfo) => { - console.log('received dial to me from:', peerInfo.id.toB58String()) - }) + // Log a message when we receive a connection + listenerNode.on('peer:connect', (peerInfo) => { + console.log('received dial to me from:', peerInfo.id.toB58String()) + }) - listenerNode.handle('/echo/1.0.0', (protocol, conn) => pull(conn, conn)) - listenerNode.start(cb) - } -], (err) => { - if (err) { throw err } + // Handle incoming connections for the protocol by piping from the stream + // back to itself (an echo) + await listenerNode.handle('/echo/1.0.0', ({ stream }) => pipe(stream.source, stream.sink)) + + // Start listening + await listenerNode.start() console.log('Listener ready, listening on:') listenerNode.peerInfo.multiaddrs.forEach((ma) => { console.log(ma.toString() + '/p2p/' + listenerId.toB58String()) }) -}) +} + +run()