| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 | '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;
 |