function done() { stream.removeAllListeners('data'); stream.removeAllListeners('error'); if (callback) callback(null, chunks, total); stream.locked = false; var deferred = stream.lockQueue.shift(); if (deferred) deferred(); };
utils.resetZlibStream = function resetZlibStream(stream, callback) { if (stream.locked) { stream.lockQueue.push(function() { resetZlibStream(stream, callback); }); return; } stream.reset(); stream.lockQueue = []; callback(null); };
utils.zstream = function zstream(stream, buffer, callback) { var chunks = [], total = 0; if (stream.locked) { stream.lockQueue.push(function() { zstream(stream, buffer, callback); }); return; } stream.locked = true; function collect(chunk) { chunks.push(chunk); total += chunk.length; } stream.on('data', collect); stream.write(buffer, done); function done() { stream.removeAllListeners('data'); stream.removeAllListeners('error'); if (callback) callback(null, chunks, total); stream.locked = false; var deferred = stream.lockQueue.shift(); if (deferred) deferred(); }; stream.once('error', function(err) { stream.removeAllListeners('data'); callback(err); callback = null; }); };