Skip to content

Instantly share code, notes, and snippets.

@ninabreznik
Last active October 14, 2021 18:53
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ninabreznik/d6aca21cff4e9d1c25feca55f89f6953 to your computer and use it in GitHub Desktop.
Save ninabreznik/d6aca21cff4e9d1c25feca55f89f6953 to your computer and use it in GitHub Desktop.
peer-2
const hypercore = require('hypercore')
const RAM = require('random-access-memory')
const hyperswarm = require('hyperswarm')
const multiplex = require('multiplex')
const Protocol = require('hypercore-protocol')
var counter = 10
const bootstrap_nodes = [
{ host: '0.0.0.0', port: 10001 },
{ host: '0.0.0.0', port: 10002 },
]
start()
async function start () {
var tid
const feedkey = '4664fde30fc9360b639721bf670e054ff8972791a9fb196947539862e1474310'
const topic = Buffer.from('d720dbd0c8a43554ac5f1e591593de34929e753464f5b9f47bd2e17d8b83c692', 'hex')
const feed = new hypercore(RAM, Buffer.from(feedkey, 'hex'), { valueEncoding: 'binary' })
const mode = { server: false, client: true }
const swarm = new hyperswarm({ bootstrap: bootstrap_nodes })
const discovery = swarm.join(topic, mode)
const server_stream = new Protocol(false)
const client_stream = new Protocol(true)
swarm.on('connection', (socket, info) => {
console.log('new connection', socket.isInitiator)
if (socket.isInitiator) {
const replication_stream = client_stream
feed.replicate(replication_stream)
socket.pipe(replication_stream).pipe(socket)
console.log({feed})
} else {
const replication_stream = server_stream
replication_stream.on('discovery-key', () => {
feed.replicate(replication_stream)
console.log('discovery key')
})
socket.pipe(replication_stream).pipe(socket)
}
// stream.on('discovery-key', (err, key) => {
// console.log('foo---------------')
// if (err) console.log('error getting discovery key', err)
// console.log('discovery key', {key})
// })
clearTimeout(tid)
console.log({text: 'SWARM - new connection',
connections: swarm.connections._byPublicKey.keys(),
peers: swarm.peers.keys(),
id: socket.id.toString('hex') ,
myKey: socket.publicKey.toString('hex'),
remoteKey: socket.remotePublicKey.toString('hex'),
info_pubKey: info.publicKey.toString('hex'),
topics: info.topics.map(topic => topic.toString('hex')),
seenTopics: info._seenTopics
})
// socket.pipe(feed.replicate(socket.isInitiator)).pipe(socket)
// // console.log({feed})
// socket.on('piping', () => console.log('SOCKET - piping'))
// socket.on('end', () => console.log('SOCKET - end'))
// socket.on('close', () => console.log('SOCKET - close'))
// // socket.on('data', () => console.log('SOCKET - data'))
// socket.on('readable', () => console.log('SOCKET - readable'))
// socket.on('finish', () => console.log('SOCKET - finish'))
// socket.on('drain', () => console.log('SOCKET - drain'))
// socket.end()
})
reconnect()
async function reconnect () {
tid = setTimeout(() => {
if (counter--) reconnect()
}, 1000)
await discovery.refresh(mode)
}
// feed.on('ready', async () => console.log('FEED - feed ready'))
// feed.on('peer-add', peer => console.log('FEED - peer add'))
// feed.on('peer-open', peer => console.log('FEED - peer open'))
// feed.on('peer-remove', peer => console.log('FEED - peer remove'))
// feed.on('upload', (index, data) => console.log('FEED - upload'))
// feed.on('download', (index, data) => console.log('FEED - download'))
// feed.on('sync', () => console.log('FEED - sync'))
// feed.on('close', () => console.log('FEED - close'))
// feed.on('error', (err) => console.log('FEED - error', err))
feed.download({ start:1, end: 15 }, () => {})
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment