Advertisement
Guest User

Untitled

a guest
Dec 13th, 2019
159
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. const hyperdrive = require('hyperdrive')
  2. const connect = require('@hyperswarm/replicator')
  3. const async = require('async')
  4.  
  5. const BREAK_THE_REPLICATION = true
  6.  
  7. const g = {}
  8. async.waterfall([
  9.   done => {
  10.     // Create drive 1
  11.     const drive = hyperdrive(`./.tmp/${Math.ceil(Math.random() * 100000).toString()}`)
  12.     drive.ready(() => {
  13.       g.drive1 = drive
  14.       drive.writeFile('/1', 'fff', (err) => {
  15.         drive.writeFile('/3', 'fff', done)
  16.       })
  17.     })
  18.   },
  19.   done => {
  20.     // Create clone of drive 1
  21.     const drive = hyperdrive(`./.tmp/${Math.ceil(Math.random() * 100000).toString()}`, g.drive1.key)
  22.     drive.ready(() => {
  23.       g.drive1_c = drive
  24.  
  25.       // If this is not done, mount won't show up new writes
  26.       if(!BREAK_THE_REPLICATION) {
  27.         drive.on('update', () => {
  28.           console.log('s')
  29.           setTimeout(() => {
  30.             drive.readdir('/44', () => {})
  31.           }, 50)
  32.         })
  33.       }
  34.       done()
  35.     })
  36.   },
  37.   done => {
  38.     // Create drive 2
  39.     const drive = hyperdrive(`./.tmp/${Math.ceil(Math.random() * 100000).toString()}`)
  40.     drive.ready(() => {
  41.       g.drive2 = drive
  42.      
  43.       done()
  44.     })
  45.   },
  46.   done => {
  47.     // Connect all drives to the swarm
  48.     g.conn1 = connect(g.drive1, { live: true })
  49.     g.conn2 = connect(g.drive1_c, { live: true })
  50.     g.conn3 = connect(g.drive2, { live: true })
  51.     done()
  52.   },
  53.   done => {
  54.     g.s1 = g.drive1_c.replicate(true, { live: true })
  55.     g.s1.pipe(g.drive2.replicate(false, { live: true })).pipe(g.s1)
  56.     done()
  57.   },
  58.   done => {
  59.     // Wait a little for the interwebz
  60.     setTimeout(() => {
  61.       // Clone of drive 1 should have drive 1's files
  62.       g.drive1_c.readdir('/', (err, list) => {
  63.         console.log(list)
  64.         // Mount the clone of drive 1 to drive 2
  65.         g.drive2.mount('test', g.drive1_c.key, err => {
  66.           done()
  67.         })
  68.       })
  69.     }, 1000)
  70.   },
  71.   done => {
  72.     // Write another file to drive 1
  73.     g.drive1.writeFile('/2', 'baa', (err) => {
  74.       setTimeout(() => {
  75.          
  76.           // Mounted drive should have bith drive 1's files
  77.           g.drive2.readdir('test', (err, list) => {
  78.             if(err) throw err
  79.             console.log(list) // This should be [ '3', '1', '2' ]
  80.  
  81.             g.drive2.stats('test/3', (err, stats) => {
  82.               console.log(stats)
  83.               // THIS IS THE PROBLEM PART
  84.               g.drive2.readFile('test/3', (err, data) => {
  85.                 if(err) throw err
  86.                 console.log(data.toString())
  87.                 done()
  88.               })
  89.             })
  90.           })
  91.       }, 1000);
  92.     })
  93.   }
  94. ])
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement