dataflo.ws
Version:
Zero-code JSON config-based dataflow engine for Node, PhoneGap and browser.
92 lines (69 loc) • 1.9 kB
JavaScript
var EventEmitter = require ('events').EventEmitter,
fs = require ('fs'),
util = require ('util'),
urlUtil = require ('url'),
task = require ('./base'),
io = require ('../io/easy'),
urlModel = require ('../model/from-url');
var deliveryTask = module.exports = function (config) {
this.init (config);
};
util.inherits (deliveryTask, task);
util.extend (deliveryTask.prototype, {
run: function () {
var self = this;
self.activityCheck ('delivery.task run');
this.originalFileName = this.originUrl.substr (this.originUrl.lastIndexOf ('/') + 1);
if (!this.originalFileName) {this.originalFileName = this.srcName;}
// create model
if (!self.model) {
try {
self.model = new urlModel (self.url);
self.url = self.model.url;
self.model.url.protocol.length;
} catch (e) {
self.emitError(e);
return;
}
self.model.timestamp = self.timestamp;
self.model.on ('data', function (chunk) {
self.activityCheck ('ftp.store data' + chunk.length);
});
self.model.on ('error', function (e) {
self.emitError(e);
});
self.model.on ('end', function () {
self.clearOperationTimeout();
self.emit ('log', 'timestamp is: '+self.timestamp);
self.completed ();
});
}
self.cacheFile = new io (self.cacheFileName);
self.cacheFile.readStream ({}, function (readStream, stats) {
if (!readStream) {
self.clearOperationTimeout();
self.emitError('readStream is undefined');
return;
}
self.activityCheck ('ftp.store start');
self.model.store ({
from: readStream,
originalFileName: self.originalFileName,
size: stats.size
});
});
},
emitError: function (e) {
if (e) {
this.state = 5;
if (this.model) {
this.model.stop ();
}
this.emit('error', e);
this.cancel();
return true;
} else {
return false;
}
}
});