Example #1
0
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;
}
Example #2
0
function Router () {
  EventEmitter.call(this, { delimeter: ':' });
  this.routes = {};
}