cloudcmd/lib/server/pipe.js
2014-03-18 06:06:58 -04:00

84 lines
2.5 KiB
JavaScript

(function () {
'use strict';
if (!global.cloudcmd)
return console.log(
'# pipe.js' + '\n' +
'# -----------' + '\n' +
'# Module is part of Cloud Commander,' + '\n' +
'# used for work with stream.' + '\n' +
'# If you wont to see at work call' + '\n' +
'# pipe.create' + '\n' +
'# http://cloudcmd.io' + '\n');
var main = global.cloudcmd.main,
Util = main.util,
fs = require('fs'),
zlib = require('zlib');
exports.getBody = getBody;
exports.create = function(params) {
var gzip, onError, read, write, isFsWrite,
p = params;
if (p) {
read = p.read || fs.createReadStream(p.from, {
bufferSize: 4 * 1024
});
if (p.write)
write = p.write;
else {
write = fs.createWriteStream(p.to);
isFsWrite = true;
}
onError = function(error) {
Util.exec(p.callback, error);
};
if (p.gzip) {
gzip = zlib.createGzip();
read.on('error', onError);
read = read.pipe(gzip);
}
write.on('error', onError);
read.on('error', onError);
Util.ifExec(!isFsWrite, function() {
read.on('data', function(data) {
write.write(data);
});
read.on('end', function() {
if (!p.notEnd)
write.end();
Util.exec(p.callback);
});
}, function(callback) {
write.on('open', callback);
});
}
};
/**
* get body of readStream
*
* @param readStream
* @param callback
*/
function getBody(readStream, callback) {
var body = '';
readStream.on('data', function(chunk) {
body += chunk;
});
readStream.on('end', function() {
Util.exec(callback, body);
});
}
})();