code: function Metroplex(primus, options) {
    if (!(this instanceof Metroplex)) return new Metroplex(primus, options);
  
    options = options || {};
    primus = primus || {};
  
    var annihilate = fs.readFileSync(
      path.join(__dirname, 'redis/annihilate.lua'),
      'utf8'
    );
    var register = fs.readFileSync(
      path.join(__dirname, 'redis/register.lua'),
      'utf8'
    );
    var parsed = this.parse(primus.server);
  
    this.fuse();
  
    this.redis = options.redis || new require('ioredis')();
    this.namespace = (options.namespace || 'metroplex') +':';
    this.interval = options.interval || 5 * 60 * 1000;
    this.timeout = options.timeout || 30 * 60;
    this.latency = options.latency || 2000;
  
    this.redis.defineCommand('annihilate', {
      lua: annihilate.replace('{namespace}', this.namespace),
      numberOfKeys: 1
    });
    this.redis.defineCommand('register', {
      lua: register.replace('{namespace}', this.namespace),
      numberOfKeys: 1
    });
  
    if (parsed || options.address) {
      this.register(options.address || parsed);
    }
  }
docs: Add defaults to the supplied options. The following options are available:
  
  - redis: The Redis instance we should use to store data
  - namespace: The namespace prefix to prevent collision's.
  - interval: Expire interval to keep the server alive in Redis
  - timeout: Timeout for sparks who are alive.
  - latency: Time it takes for our Redis commands to execute.
  
  @param {Primus} primus The Primus instance that received the plugin.
  @param {Object} options Configuration.
  @returns {Object} Options.
  @api public