cloudcmd/lib/server/pipe.js
2014-03-25 04:05:13 -04:00

106 lines
3.1 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.create = create;
exports.getBody = getBody;
/**
* create pipe
* params: {callback, read or from, write or to, gzip}
* read - readable stream
* write - writable stream
* to - name of file to write
* from - name of file to read
* gzip - should gzip to be used
* callback - function(error) {}
*
* @param params
* @param callback
*/
function create(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 || p.gunzip) {
if (p.gzip)
gzip = zlib.createGzip();
else
gzip = zlib.createGunzip();
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('error', function(error) {
Util.retExec(callback, error);
});
readStream.on('end', function() {
Util.exec(callback, null, body);
});
}
})();