diff options
author | Max Ogden <max@maxogden.com> | 2016-08-05 12:36:08 -0700 |
---|---|---|
committer | Max Ogden <max@maxogden.com> | 2016-08-05 12:36:08 -0700 |
commit | 416108575f8207d687c52ca079117bcc5cfdb515 (patch) | |
tree | a6b6a2d5624b8edcbb6e4542714785f91e581649 /docs/diy-dat.md | |
parent | 6879daedad2d53e32d1d9d7bf8b1c74574bc28ef (diff) | |
parent | ffb465bb3bcebb62c5e63cc3ed80d70274848deb (diff) | |
download | dat-docs-416108575f8207d687c52ca079117bcc5cfdb515.tar.gz dat-docs-416108575f8207d687c52ca079117bcc5cfdb515.zip |
Merge branch 'master' of https://github.com/datproject/docs
Diffstat (limited to 'docs/diy-dat.md')
-rw-r--r-- | docs/diy-dat.md | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/docs/diy-dat.md b/docs/diy-dat.md new file mode 100644 index 0000000..fb16fc1 --- /dev/null +++ b/docs/diy-dat.md @@ -0,0 +1,41 @@ +# DIY Dat + +This document shows how to write your own compatible `dat` client using node modules. + +The three essential node modules are called [hyperdrive](https://npmjs.org/hyperdrive), [hyperdrive-archive-swarm](https://npmjs.org/hyperdrive-archive-swarm) and [level](https://npmjs.org/level). Hyperdrive does file synchronization and versioning, hyperdrive-archive-swarm does peer discovery over local networks and the Internet, and level provides a local LevelDB for storing metadata. More details are available in [How Dat Works](how-dat-works.md). The [dat](https://npmjs.org/dat) module itself is just some code that combines these modules and wraps them in a command-line API. + +Here's the minimal code needed to download data from a dat: + +```js +// run this like: node thisfile.js 4c325f7874b4070blahblahetc +// the dat link someone sent us, we want to download the data from it +var link = new Buffer(process.argv[2], 'hex') + +var Hyperdrive = require('hyperdrive') +var Swarm = require('hyperdrive-archive-swarm') +var level = require('level') +var raf = require('random-access-file') +var each = require('stream-each') + +var db = level('./dat.db') +var drive = Hyperdrive(db) +var archive = drive.createArchive(link, { + file: function (name) { + return raf(path.join(self.dir, name)) + } +}) +var swarm = Swarm(archive) + +archive.open(function (err) { + if (err) return console.error(err) + each(archive.list({live: archive.live}), function (data, next) { + var startBytes = self.stats.bytesDown + archive.download(data, function (err) { + if (err) return console.error(err) + console.log('file downloaded', data.relname) + next() + }) + }, done) +}) + +``` |