| 'use strict'; |
| |
| var inherits = require('inherits') |
| , EventEmitter = require('events').EventEmitter |
| ; |
| |
| var debug = function() {}; |
| if (process.env.NODE_ENV !== 'production') { |
| debug = require('debug')('sockjs-client:polling'); |
| } |
| |
| function Polling(Receiver, receiveUrl, AjaxObject) { |
| debug(receiveUrl); |
| EventEmitter.call(this); |
| this.Receiver = Receiver; |
| this.receiveUrl = receiveUrl; |
| this.AjaxObject = AjaxObject; |
| this._scheduleReceiver(); |
| } |
| |
| inherits(Polling, EventEmitter); |
| |
| Polling.prototype._scheduleReceiver = function() { |
| debug('_scheduleReceiver'); |
| var self = this; |
| var poll = this.poll = new this.Receiver(this.receiveUrl, this.AjaxObject); |
| |
| poll.on('message', function(msg) { |
| debug('message', msg); |
| self.emit('message', msg); |
| }); |
| |
| poll.once('close', function(code, reason) { |
| debug('close', code, reason, self.pollIsClosing); |
| self.poll = poll = null; |
| |
| if (!self.pollIsClosing) { |
| if (reason === 'network') { |
| self._scheduleReceiver(); |
| } else { |
| self.emit('close', code || 1006, reason); |
| self.removeAllListeners(); |
| } |
| } |
| }); |
| }; |
| |
| Polling.prototype.abort = function() { |
| debug('abort'); |
| this.removeAllListeners(); |
| this.pollIsClosing = true; |
| if (this.poll) { |
| this.poll.abort(); |
| } |
| }; |
| |
| module.exports = Polling; |