torrent-piece
Version:
Torrent piece abstraction
68 lines (46 loc) • 1.98 kB
Markdown
[]: https://img.shields.io/github/workflow/status/webtorrent/torrent-piece/ci/master
[]: https://github.com/webtorrent/torrent-piece/actions
[]: https://img.shields.io/npm/v/torrent-piece.svg
[]: https://npmjs.org/package/torrent-piece
[]: https://img.shields.io/npm/dm/torrent-piece.svg
[]: https://npmjs.org/package/torrent-piece
[]: https://img.shields.io/badge/code_style-standard-brightgreen.svg
[]: https://standardjs.com
[](https://saucelabs.com/u/torrent-piece)
Also works in the browser with [browserify](http://browserify.org/)! This module is used by [WebTorrent](http://webtorrent.io) and [torrent-stream](https://npmjs.com/package/torrent-stream).
```
npm install torrent-piece
```
```js
import Piece from 'torrent-piece'
Piece.BLOCK_LENGTH // 16384
const pieceLength = Piece.BLOCK_LENGTH * 5
const piece = new Piece(pieceLength)
piece.missing // 81920
piece.reserve() // 0
piece.set(0, someBuffer0)
piece.reserve() // 1
piece.reserve() // 2
piece.reserve() // 3
piece.set(1, someBuffer1)
piece.set(2, someBuffer2)
piece.set(3, someBuffer3)
piece.reserve() // 4
piece.cancel(4) // cancel the reservation of a chunk
piece.reserve() // 4 (given out again)
piece.set(4, someBuffer4)
// handy functions
piece.chunkLength(0) // 16384
piece.chunkOffset(0) // 0
// eventually, when no more chunks left...
piece.reserve() // -1 (signal that all chunks are reserved)
piece.missing // 0
const pieceBuffer = piece.flush()
console.log(pieceBuffer)
```
MIT. Copyright (c) [Feross Aboukhadijeh](https://feross.org) and [WebTorrent, LLC](https://webtorrent.io).