You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
'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;
|