57 lines
1.4 KiB
JavaScript
Raw Permalink Normal View History

/* eslint-disable no-console */
2017-07-20 19:42:32 -07:00
'use strict'
2019-12-16 22:28:35 +00:00
const Libp2p = require('../../')
2017-07-20 19:42:32 -07:00
const TCP = require('libp2p-tcp')
const Mplex = require('libp2p-mplex')
const { NOISE } = require('libp2p-noise')
const Gossipsub = require('libp2p-gossipsub')
const uint8ArrayFromString = require('uint8arrays/from-string')
const uint8ArrayToString = require('uint8arrays/to-string')
2017-07-20 19:42:32 -07:00
2019-12-16 22:28:35 +00:00
const createNode = async () => {
const node = await Libp2p.create({
addresses: {
listen: ['/ip4/0.0.0.0/tcp/0']
},
2019-12-16 22:28:35 +00:00
modules: {
transport: [TCP],
streamMuxer: [Mplex],
connEncryption: [NOISE],
2019-12-16 22:28:35 +00:00
pubsub: Gossipsub
2017-07-20 19:42:32 -07:00
}
2019-12-16 22:28:35 +00:00
})
2019-12-16 22:28:35 +00:00
await node.start()
return node
2017-07-20 19:42:32 -07:00
}
2019-12-16 22:28:35 +00:00
;(async () => {
const topic = 'news'
2017-07-20 19:42:32 -07:00
2019-12-16 22:28:35 +00:00
const [node1, node2] = await Promise.all([
createNode(),
createNode()
2019-12-16 22:28:35 +00:00
])
2017-07-20 19:42:32 -07:00
// Add node's 2 data to the PeerStore
node1.peerStore.addressBook.set(node2.peerId, node2.multiaddrs)
await node1.dial(node2.peerId)
2017-07-20 19:42:32 -07:00
node1.pubsub.on(topic, (msg) => {
console.log(`node1 received: ${uint8ArrayToString(msg.data)}`)
2019-12-16 22:28:35 +00:00
})
await node1.pubsub.subscribe(topic)
2017-07-20 19:42:32 -07:00
// Will not receive own published messages by default
node2.pubsub.on(topic, (msg) => {
console.log(`node2 received: ${uint8ArrayToString(msg.data)}`)
2017-07-20 19:42:32 -07:00
})
await node2.pubsub.subscribe(topic)
2019-12-16 22:28:35 +00:00
// node2 publishes "news" every second
setInterval(() => {
node2.pubsub.publish(topic, uint8ArrayFromString('Bird bird bird, bird is the word!'))
2019-12-16 22:28:35 +00:00
}, 1000)
})()