UNPKG

plasmid

Version:

A low-level implementation of the anti-entropy gossip protocol scuttlebutt.

83 lines (68 loc) 1.55 kB
Error.stackTraceLimit = Infinity; var Host = require('./lib/').Host var opts = { syncHistory: true, peerSelection: 'random', gossipRate: 30 } var a = new Host('A', opts) a.set('a', 'A') var b = new Host('B', opts) b.set('b', 'B') var c = new Host('C', opts) c.set('c', 'C') var as = a.createStream({ end: false }) as.pipe(b.exchange()) .pipe(as) var bs = b.createStream({ end: false }) bs.pipe(c.exchange()) .pipe(bs) var cs = c.createStream({ end: false }) cs.pipe(a.exchange()) .pipe(cs) function gossip() { as.gossip() bs.gossip() cs.gossip() } repeat(gossip, 6, function() { console.log(a.state.states) console.log(b.state.states) console.log(c.state.states) }) // net.createServer(function (socket) { // // // digest -> deltas // socket.pipe(b).pipe(socket) // b.createDigestStream().pipe(socket).pipe(b) // // }).listen(8000, function () { // // var socket = net.connect(8000) // // deltas -> update // a.createDigestStream().pipe(socket).pipe(a) // // }) // var as = a.createStream() // var bs = b.createStream() // var cs = c.createStream() // // as.pipe(b.createStream()).pipe(as) // bs.pipe(c.createStream()).pipe(bs) // cs.pipe(a.createStream()).pipe(cs) // // setTimeout(function() { // a.end() // b.end() // c.end() // // console.log(a.states) // console.log(b.states) // console.log(c.states) // }, 7000) function repeat(fn, times, callback) { fn() setImmediate(function() { if (--times > 1) { repeat(fn, times, callback) } else { callback() } }) }