Spaces:
Running
Running
var util = require('util') | |
var stream = require('readable-stream') | |
var delegate = require('delegates') | |
var Tracker = require('./tracker.js') | |
var TrackerStream = module.exports = function (name, size, options) { | |
stream.Transform.call(this, options) | |
this.tracker = new Tracker(name, size) | |
this.name = name | |
this.id = this.tracker.id | |
this.tracker.on('change', delegateChange(this)) | |
} | |
util.inherits(TrackerStream, stream.Transform) | |
function delegateChange (trackerStream) { | |
return function (name, completion, tracker) { | |
trackerStream.emit('change', name, completion, trackerStream) | |
} | |
} | |
TrackerStream.prototype._transform = function (data, encoding, cb) { | |
this.tracker.completeWork(data.length ? data.length : 1) | |
this.push(data) | |
cb() | |
} | |
TrackerStream.prototype._flush = function (cb) { | |
this.tracker.finish() | |
cb() | |
} | |
delegate(TrackerStream.prototype, 'tracker') | |
.method('completed') | |
.method('addWork') | |
.method('finish') | |