Last active
October 14, 2021 18:53
-
-
Save ninabreznik/d6aca21cff4e9d1c25feca55f89f6953 to your computer and use it in GitHub Desktop.
peer-2
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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