| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 | 'use strict';var inherits = require('inherits')  , EventEmitter = require('events').EventEmitter  ;var debug = function() {};if (process.env.NODE_ENV !== 'production') {  debug = require('debug')('sockjs-client:receiver:xhr');}function XhrReceiver(url, AjaxObject) {  debug(url);  EventEmitter.call(this);  var self = this;  this.bufferPosition = 0;  this.xo = new AjaxObject('POST', url, null);  this.xo.on('chunk', this._chunkHandler.bind(this));  this.xo.once('finish', function(status, text) {    debug('finish', status, text);    self._chunkHandler(status, text);    self.xo = null;    var reason = status === 200 ? 'network' : 'permanent';    debug('close', reason);    self.emit('close', null, reason);    self._cleanup();  });}inherits(XhrReceiver, EventEmitter);XhrReceiver.prototype._chunkHandler = function(status, text) {  debug('_chunkHandler', status);  if (status !== 200 || !text) {    return;  }  for (var idx = -1; ; this.bufferPosition += idx + 1) {    var buf = text.slice(this.bufferPosition);    idx = buf.indexOf('\n');    if (idx === -1) {      break;    }    var msg = buf.slice(0, idx);    if (msg) {      debug('message', msg);      this.emit('message', msg);    }  }};XhrReceiver.prototype._cleanup = function() {  debug('_cleanup');  this.removeAllListeners();};XhrReceiver.prototype.abort = function() {  debug('abort');  if (this.xo) {    this.xo.close();    debug('close');    this.emit('close', null, 'user');    this.xo = null;  }  this._cleanup();};module.exports = XhrReceiver;
 |