Sha256: 0804d8ffd99bf47a06c302ad71be25abd20d6e92dc12367bbfad211b9476a16e

Contents?: true

Size: 1.55 KB

Versions: 34

Compression:

Stored size: 1.55 KB

Contents

'use strict';

var inherits = require('inherits')
  , EventEmitter = require('events').EventEmitter
  , EventSourceDriver = require('eventsource')
  ;

var debug = function() {};
if (process.env.NODE_ENV !== 'production') {
  debug = require('debug')('sockjs-client:receiver:eventsource');
}

function EventSourceReceiver(url) {
  debug(url);
  EventEmitter.call(this);

  var self = this;
  var es = this.es = new EventSourceDriver(url);
  es.onmessage = function(e) {
    debug('message', e.data);
    self.emit('message', decodeURI(e.data));
  };
  es.onerror = function(e) {
    debug('error', es.readyState, e);
    // ES on reconnection has readyState = 0 or 1.
    // on network error it's CLOSED = 2
    var reason = (es.readyState !== 2 ? 'network' : 'permanent');
    self._cleanup();
    self._close(reason);
  };
}

inherits(EventSourceReceiver, EventEmitter);

EventSourceReceiver.prototype.abort = function() {
  debug('abort');
  this._cleanup();
  this._close('user');
};

EventSourceReceiver.prototype._cleanup = function() {
  debug('cleanup');
  var es = this.es;
  if (es) {
    es.onmessage = es.onerror = null;
    es.close();
    this.es = null;
  }
};

EventSourceReceiver.prototype._close = function(reason) {
  debug('close', reason);
  var self = this;
  // Safari and chrome < 15 crash if we close window before
  // waiting for ES cleanup. See:
  // https://code.google.com/p/chromium/issues/detail?id=89155
  setTimeout(function() {
    self.emit('close', null, reason);
    self.removeAllListeners();
  }, 200);
};

module.exports = EventSourceReceiver;

Version data entries

34 entries across 33 versions & 12 rubygems

Version Path
optimacms-0.1.61 spec/dummy/node_modules/sockjs-client/lib/transport/receiver/eventsource.js
disco_app-0.18.0 test/dummy/node_modules/sockjs-client/lib/transport/receiver/eventsource.js
disco_app-0.18.2 test/dummy/node_modules/sockjs-client/lib/transport/receiver/eventsource.js
disco_app-0.16.1 test/dummy/node_modules/sockjs-client/lib/transport/receiver/eventsource.js
disco_app-0.15.2 test/dummy/node_modules/sockjs-client/lib/transport/receiver/eventsource.js
disco_app-0.18.4 test/dummy/node_modules/sockjs-client/lib/transport/receiver/eventsource.js
disco_app-0.18.1 test/dummy/node_modules/sockjs-client/lib/transport/receiver/eventsource.js
disco_app-0.12.7.pre.puma.pre.3 test/dummy/node_modules/sockjs-client/lib/transport/receiver/eventsource.js
disco_app-0.14.0 test/dummy/node_modules/sockjs-client/lib/transport/receiver/eventsource.js
disco_app-0.13.6.pre.puma.pre.3 test/dummy/node_modules/sockjs-client/lib/transport/receiver/eventsource.js
tang-0.2.1 spec/tang_app/node_modules/sockjs-client/lib/transport/receiver/eventsource.js
groonga-client-model-6.0.0 test/apps/rails6.0.3.5/node_modules/sockjs-client/lib/transport/receiver/eventsource.js
groonga-client-model-6.0.0 test/apps/rails6.1.3/node_modules/sockjs-client/lib/transport/receiver/eventsource.js
ruby2js-4.0.4 lib/tasks/testrails/node_modules/sockjs-client/lib/transport/receiver/eventsource.js
ruby2js-4.0.3 lib/tasks/testrails/node_modules/sockjs-client/lib/transport/receiver/eventsource.js
tang-0.2.0 spec/tang_app/node_modules/sockjs-client/lib/transport/receiver/eventsource.js
tang-0.1.0 spec/tang_app/node_modules/sockjs-client/lib/transport/receiver/eventsource.js
tang-0.0.9 spec/tang_app/node_modules/sockjs-client/lib/transport/receiver/eventsource.js
enju_library-0.3.8 spec/dummy/node_modules/sockjs-client/lib/transport/receiver/eventsource.js
ilog-0.4.1 node_modules/sockjs-client/lib/transport/receiver/eventsource.js