function Base () { EventEmitter.call(this, { delimeter: ':' }); this.connected = false; this.set('interval', '30m'); this.disable('sandbox'); this.meta = {}; this.meta.timer = null; this.meta.stack = [ emit ]; var self = this , decoder, queue; // queue handles user interaction with responses queue = new Queue(function (obj, done) { var device = obj.device , stack = self.meta.stack , timestamp = obj.timestamp; // intercept errors so as not to cancel queue function finish (err) { if (err) { debug('(iterate) error - %s', err.message); self.emit('iterate:error', err, device, timestamp); } debug('(iterate) end - %s', device.toString()); done(); } // start iteration debug('(iterate) start - %s', device.toString()); series(stack, function (fn, next) { fn.apply(self, [ device, timestamp, next ]); }, finish); }, 10); // emit queue errors on feedback agent queue.onerror = function (err) { debug('(queue) error: %s', err.message); self.emit('queue:error', err); }; // emit queue drain on feedback agent queue.drain = function () { debug('(queue) drain'); self.emit('queue:drain'); }; // decoder handing incoming feedback responses decoder = lotus.createDecoder(); decoder.stream(codecs.getInterface('feedback response', 'decode')); decoder.stream().on('readable', function () { var obj = this.read() , res = {}; res.device = new Device(obj.deviceToken); res.timestamp = new Date(obj.timestamp * 1000); queue.push(res, true); }); this.decoder = decoder; this.feedback = null; this.queue = queue; }
function Router () { EventEmitter.call(this, { delimeter: ':' }); this.routes = {}; }