Skip to content
This repository was archived by the owner on Apr 29, 2020. It is now read-only.

Commit 0be223a

Browse files
committed
feat: muxer selection
1 parent 222efa4 commit 0be223a

File tree

6 files changed

+145
-4
lines changed

6 files changed

+145
-4
lines changed

examples/transfer-file/dialer.js

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
'use strict'
2+
/* eslint-disable no-console */
3+
4+
const PeerId = require('peer-id')
5+
const PeerInfo = require('peer-info')
6+
const Node = require('../../src')
7+
const multiaddr = require('multiaddr')
8+
const pull = require('pull-stream')
9+
const async = require('async')
10+
let idListener
11+
12+
async.parallel([
13+
(callback) => {
14+
PeerId.createFromJSON(require('./peer-id-dialer'), (err, idDialer) => {
15+
if (err) {
16+
throw err
17+
}
18+
callback(null, idDialer)
19+
})
20+
},
21+
(callback) => {
22+
PeerId.createFromJSON(require('./peer-id-listener'), (err, idListener) => {
23+
if (err) {
24+
throw err
25+
}
26+
callback(null, idListener)
27+
})
28+
}
29+
], (err, ids) => {
30+
if (err) throw err
31+
const peerDialer = new PeerInfo(ids[0])
32+
peerDialer.multiaddr.add(multiaddr('/ip4/0.0.0.0/tcp/0'))
33+
const nodeDialer = new Node(peerDialer)
34+
35+
const peerListener = new PeerInfo(ids[1])
36+
idListener = ids[1]
37+
peerListener.multiaddr.add(multiaddr('/ip4/127.0.0.1/tcp/10333'))
38+
nodeDialer.start((err) => {
39+
if (err) {
40+
throw err
41+
}
42+
43+
console.log('Dialer ready, listening on:')
44+
45+
peerListener.multiaddrs.forEach((ma) => {
46+
console.log(ma.toString() + '/ipfs/' + idListener.toB58String())
47+
})
48+
49+
nodeDialer.dialByPeerInfo(peerListener, '/echo/1.0.0', (err, conn) => {
50+
if (err) {
51+
throw err
52+
}
53+
console.log('nodeA dialed to nodeB on protocol: /echo/1.0.0')
54+
55+
pull(
56+
pull.values(['hey']),
57+
conn,
58+
pull.through(console.log),
59+
pull.collect((err, data) => {
60+
if (err) {
61+
throw err
62+
}
63+
console.log('received echo:', data.toString())
64+
})
65+
)
66+
})
67+
})
68+
})

examples/transfer-file/listener.js

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
'use strict'
2+
/* eslint-disable no-console */
3+
4+
const PeerId = require('peer-id')
5+
const PeerInfo = require('peer-info')
6+
const Node = require('../../src')
7+
const multiaddr = require('multiaddr')
8+
const pull = require('pull-stream')
9+
10+
PeerId.createFromJSON(require('./peer-id-listener'), (err, idListener) => {
11+
if (err) {
12+
throw err
13+
}
14+
const peerListener = new PeerInfo(idListener)
15+
peerListener.multiaddr.add(multiaddr('/ip4/0.0.0.0/tcp/10333'))
16+
const nodeListener = new Node(peerListener)
17+
18+
nodeListener.start((err) => {
19+
if (err) {
20+
throw err
21+
}
22+
23+
nodeListener.swarm.on('peer-mux-established', (peerInfo) => {
24+
console.log(peerInfo.id.toB58String())
25+
})
26+
27+
nodeListener.handle('/echo/1.0.0', (protocol, conn) => {
28+
pull(
29+
conn,
30+
conn
31+
)
32+
})
33+
34+
nodeListener.handle('/hello/1.0.0', (protocol, conn) => {
35+
pull(
36+
pull.values(['hello', 'world']),
37+
conn
38+
)
39+
setTimeout(() => {
40+
console.log('Printing my peerbook')
41+
Object
42+
.keys(nodeListener.peerBook.getAll())
43+
.forEach(console.log)
44+
}, 500)
45+
})
46+
console.log('Listener ready, listening on:')
47+
peerListener.multiaddrs.forEach((ma) => {
48+
console.log(ma.toString() + '/ipfs/' + idListener.toB58String())
49+
})
50+
})
51+
})
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"id": "Qma3GsJmB47xYuyahPZPSadh1avvxfyYQwk8R3UnFrQ6aP",
3+
"privKey": "CAASpwkwggSjAgEAAoIBAQCaNSDOjPz6T8HZsf7LDpxiQRiN2OjeyIHUS05p8QWOr3EFUCFsC31R4moihE5HN+FxNalUyyFZU//yjf1pdnlMJqrVByJSMa+y2y4x2FucpoCAO97Tx+iWzwlZ2UXEUXM1Y81mhPbeWXy+wP2xElTgIER0Tsn/thoA0SD2u9wJuVvM7dB7cBcHYmqV6JH+KWCedRTum6O1BssqP/4Lbm2+rkrbZ4+oVRoU2DRLoFhKqwqLtylrbuj4XOI3XykMXV5+uQXz1JzubNOB9lsc6K+eRC+w8hhhDuFMgzkZ4qomCnx3uhO67KaICd8yqqBa6PJ/+fBM5Xk4hjyR40bwcf41AgMBAAECggEAZnrCJ6IYiLyyRdr9SbKXCNDb4YByGYPEi/HT1aHgIJfFE1PSMjxcdytxfyjP4JJpVtPjiT9JFVU2ddoYu5qJN6tGwjVwgJEWg1UXmPaAw1T/drjS94kVsAs82qICtFmwp52Apg3dBZ0Qwq/8qE1XbG7lLyohIbfCBiL0tiPYMfkcsN9gnFT/kFCX0LVs2pa9fHCRMY9rqCc4/rWJa1w8sMuQ23y4lDaxKF9OZVvOHFQkbBDrkquWHE4r55fchCz/rJklkPJUNENuncBRu0/2X+p4IKFD1DnttXNwb8j4LPiSlLro1T0hiUr5gO2QmdYwXFF63Q3mjQy0+5I4eNbjjQKBgQDZvZy3gUKS/nQNkYfq9za80uLbIj/cWbO+ZZjXCsj0fNIcQFJcKMBoA7DjJvu2S/lf86/41YHkPdmrLAEQAkJ+5BBNOycjYK9minTEjIMMmZDTXXugZ62wnU6F46uLkgEChTqEP57Y6xwwV+JaEDFEsW5N1eE9lEVX9nGIr4phMwKBgQC1TazLuEt1WBx/iUT83ita7obXqoKNzwsS/MWfY2innzYZKDOqeSYZzLtt9uTtp4X4uLyPbYs0qFYhXLsUYMoGHNN8+NdjoyxCjQRJRBkMtaNR0lc5lVDWl3bTuJovjFCgAr9uqJrmI5OHcCIk/cDpdWb3nWaMihVlePmiTcTy9wKBgQCU0u7c1jKkudqks4XM6a+2HAYGdUBk4cLjLhnrUWnNAcuyl5wzdX8dGPi8KZb+IKuQE8WBNJ2VXVj7kBYh1QmSJVunDflQSvNYCOaKuOeRoxzD+y9Wkca74qkbBmPn/6FFEb7PSZTO+tPHjyodGNgz9XpJJRjQuBk1aDJtlF3m1QKBgE5SAr5ym65SZOU3UGUIOKRsfDW4Q/OsqDUImvpywCgBICaX9lHDShFFHwau7FA52ScL7vDquoMB4UtCOtLfyQYA9995w9oYCCurrVlVIJkb8jSLcADBHw3EmqF1kq3NqJqm9TmBfoDCh52vdCCUufxgKh33kfBOSlXuf7B8dgMbAoGAZ3r0/mBQX6S+s5+xCETMTSNv7TQzxgtURIpVs+ZVr2cMhWhiv+n0Omab9X9Z50se8cWl5lkvx8vn3D/XHHIPrMF6qk7RAXtvReb+PeitNvm0odqjFv0J2qki6fDs0HKwq4kojAXI1Md8Th0eobNjsy21fEEJT7uKMJdovI/SErI=",
4+
"pubKey": "CAASpgIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCaNSDOjPz6T8HZsf7LDpxiQRiN2OjeyIHUS05p8QWOr3EFUCFsC31R4moihE5HN+FxNalUyyFZU//yjf1pdnlMJqrVByJSMa+y2y4x2FucpoCAO97Tx+iWzwlZ2UXEUXM1Y81mhPbeWXy+wP2xElTgIER0Tsn/thoA0SD2u9wJuVvM7dB7cBcHYmqV6JH+KWCedRTum6O1BssqP/4Lbm2+rkrbZ4+oVRoU2DRLoFhKqwqLtylrbuj4XOI3XykMXV5+uQXz1JzubNOB9lsc6K+eRC+w8hhhDuFMgzkZ4qomCnx3uhO67KaICd8yqqBa6PJ/+fBM5Xk4hjyR40bwcf41AgMBAAE="
5+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"id": "QmcrQZ6RJdpYuGvZqD5QEHAv6qX4BrQLJLQPQUrTrzdcgm",
3+
"privKey": "CAASqAkwggSkAgEAAoIBAQDLZZcGcbe4urMBVlcHgN0fpBymY+xcr14ewvamG70QZODJ1h9sljlExZ7byLiqRB3SjGbfpZ1FweznwNxWtWpjHkQjTVXeoM4EEgDSNO/Cg7KNlU0EJvgPJXeEPycAZX9qASbVJ6EECQ40VR/7+SuSqsdL1hrmG1phpIju+D64gLyWpw9WEALfzMpH5I/KvdYDW3N4g6zOD2mZNp5y1gHeXINHWzMF596O72/6cxwyiXV1eJ000k1NVnUyrPjXtqWdVLRk5IU1LFpoQoXZU5X1hKj1a2qt/lZfH5eOrF/ramHcwhrYYw1txf8JHXWO/bbNnyemTHAvutZpTNrsWATfAgMBAAECggEAQj0obPnVyjxLFZFnsFLgMHDCv9Fk5V5bOYtmxfvcm50us6ye+T8HEYWGUa9RrGmYiLweuJD34gLgwyzE1RwptHPj3tdNsr4NubefOtXwixlWqdNIjKSgPlaGULQ8YF2tm/kaC2rnfifwz0w1qVqhPReO5fypL+0ShyANVD3WN0Fo2ugzrniCXHUpR2sHXSg6K+2+qWdveyjNWog34b7CgpV73Ln96BWae6ElU8PR5AWdMnRaA9ucA+/HWWJIWB3Fb4+6uwlxhu2L50Ckq1gwYZCtGw63q5L4CglmXMfIKnQAuEzazq9T4YxEkp+XDnVZAOgnQGUBYpetlgMmkkh9qQKBgQDvsEs0ThzFLgnhtC2Jy//ZOrOvIAKAZZf/mS08AqWH3L0/Rjm8ZYbLsRcoWU78sl8UFFwAQhMRDBP9G+RPojWVahBL/B7emdKKnFR1NfwKjFdDVaoX5uNvZEKSl9UubbC4WZJ65u/cd5jEnj+w3ir9G8n+P1gp/0yBz02nZXFgSwKBgQDZPQr4HBxZL7Kx7D49ormIlB7CCn2i7mT11Cppn5ifUTrp7DbFJ2t9e8UNk6tgvbENgCKXvXWsmflSo9gmMxeEOD40AgAkO8Pn2R4OYhrwd89dECiKM34HrVNBzGoB5+YsAno6zGvOzLKbNwMG++2iuNXqXTk4uV9GcI8OnU5ZPQKBgCZUGrKSiyc85XeiSGXwqUkjifhHNh8yH8xPwlwGUFIZimnD4RevZI7OEtXw8iCWpX2gg9XGuyXOuKORAkF5vvfVriV4e7c9Ad4Igbj8mQFWz92EpV6NHXGCpuKqRPzXrZrNOA9PPqwSs+s9IxI1dMpk1zhBCOguWx2m+NP79NVhAoGBAI6WSoTfrpu7ewbdkVzTWgQTdLzYNe6jmxDf2ZbKclrf7lNr/+cYIK2Ud5qZunsdBwFdgVcnu/02czeS42TvVBgs8mcgiQc/Uy7yi4/VROlhOnJTEMjlU2umkGc3zLzDgYiRd7jwRDLQmMrYKNyEr02HFKFn3w8kXSzW5I8rISnhAoGBANhchHVtJd3VMYvxNcQb909FiwTnT9kl9pkjhwivx+f8/K8pDfYCjYSBYCfPTM5Pskv5dXzOdnNuCj6Y2H/9m2SsObukBwF0z5Qijgu1DsxvADVIKZ4rzrGb4uSEmM6200qjJ/9U98fVM7rvOraakrhcf9gRwuspguJQnSO9cLj6",
4+
"pubKey": "CAASpgIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDLZZcGcbe4urMBVlcHgN0fpBymY+xcr14ewvamG70QZODJ1h9sljlExZ7byLiqRB3SjGbfpZ1FweznwNxWtWpjHkQjTVXeoM4EEgDSNO/Cg7KNlU0EJvgPJXeEPycAZX9qASbVJ6EECQ40VR/7+SuSqsdL1hrmG1phpIju+D64gLyWpw9WEALfzMpH5I/KvdYDW3N4g6zOD2mZNp5y1gHeXINHWzMF596O72/6cxwyiXV1eJ000k1NVnUyrPjXtqWdVLRk5IU1LFpoQoXZU5X1hKj1a2qt/lZfH5eOrF/ramHcwhrYYw1txf8JHXWO/bbNnyemTHAvutZpTNrsWATfAgMBAAE="
5+
}

package.json

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@
55
"main": "src/index.js",
66
"scripts": {
77
"test": "aegir-test node",
8+
"test:muxer:spdy": "aegir-test node LIBP2P_MUXER=spdy",
9+
"test:muxer:multiplex": "aegir-test node LIBP2P_MUXER=multiplex",
10+
"test:muxer:both": "aegir-test node LIBP2P_MUXER=spdy, multiplex",
811
"lint": "aegir-lint",
912
"release": "aegir-release node",
1013
"release-minor": "aegir-release node --type minor",
@@ -43,6 +46,7 @@
4346
"dependencies": {
4447
"libp2p": "^0.3.1",
4548
"libp2p-mdns": "^0.5.2",
49+
"libp2p-multiplex": "^0.3.2",
4650
"libp2p-secio": "^0.6.5",
4751
"libp2p-spdy": "^0.10.3",
4852
"libp2p-swarm": "^0.26.10",
@@ -66,4 +70,4 @@
6670
"greenkeeperio-bot <[email protected]>",
6771
"varunagarwal315 <[email protected]>"
6872
]
69-
}
73+
}

src/index.js

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ const WebRTCStar = require('libp2p-webrtc-star')
66
const MulticastDNS = require('libp2p-mdns')
77
const WS = require('libp2p-websockets')
88
const spdy = require('libp2p-spdy')
9+
const multiplex = require('libp2p-multiplex')
910
const secio = require('libp2p-secio')
1011
const libp2p = require('libp2p')
1112

@@ -21,9 +22,16 @@ class Node extends libp2p {
2122
webRTCStar
2223
],
2324
connection: {
24-
muxer: [
25-
spdy
26-
],
25+
muxer: process.env.LIBP2P_MUXER ? (() => {
26+
const muxerPrefs = process.env.LIBP2P_MUXER
27+
return muxerPrefs.split(',').map((pref) => {
28+
switch (pref) {
29+
case 'spdy': return spdy
30+
case 'multiplex': return multiplex
31+
default: throw new Error(pref + ' muxer not available')
32+
}
33+
})
34+
})() : [spdy],
2735
crypto: [
2836
secio
2937
]

0 commit comments

Comments
 (0)