148 lines
2.4 KiB
JavaScript
148 lines
2.4 KiB
JavaScript
|
|
||
|
/*!
|
||
|
* socket.io-node
|
||
|
* Copyright(c) 2011 LearnBoost <dev@learnboost.com>
|
||
|
* MIT Licensed
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
* Module requirements.
|
||
|
*/
|
||
|
|
||
|
var HTTPTransport = require('./http');
|
||
|
|
||
|
/**
|
||
|
* Exports the constructor.
|
||
|
*/
|
||
|
|
||
|
exports = module.exports = HTTPPolling;
|
||
|
|
||
|
/**
|
||
|
* HTTP polling constructor.
|
||
|
*
|
||
|
* @api public.
|
||
|
*/
|
||
|
|
||
|
function HTTPPolling (mng, data, req) {
|
||
|
HTTPTransport.call(this, mng, data, req);
|
||
|
};
|
||
|
|
||
|
/**
|
||
|
* Inherits from HTTPTransport.
|
||
|
*
|
||
|
* @api public.
|
||
|
*/
|
||
|
|
||
|
HTTPPolling.prototype.__proto__ = HTTPTransport.prototype;
|
||
|
|
||
|
/**
|
||
|
* Transport name
|
||
|
*
|
||
|
* @api public
|
||
|
*/
|
||
|
|
||
|
HTTPPolling.prototype.name = 'httppolling';
|
||
|
|
||
|
/**
|
||
|
* Override setHandlers
|
||
|
*
|
||
|
* @api private
|
||
|
*/
|
||
|
|
||
|
HTTPPolling.prototype.setHandlers = function () {
|
||
|
HTTPTransport.prototype.setHandlers.call(this);
|
||
|
this.socket.removeListener('end', this.bound.end);
|
||
|
this.socket.removeListener('close', this.bound.close);
|
||
|
};
|
||
|
|
||
|
/**
|
||
|
* Removes heartbeat timeouts for polling.
|
||
|
*/
|
||
|
|
||
|
HTTPPolling.prototype.setHeartbeatInterval = function () {
|
||
|
return this;
|
||
|
};
|
||
|
|
||
|
/**
|
||
|
* Handles a request
|
||
|
*
|
||
|
* @api private
|
||
|
*/
|
||
|
|
||
|
HTTPPolling.prototype.handleRequest = function (req) {
|
||
|
HTTPTransport.prototype.handleRequest.call(this, req);
|
||
|
|
||
|
if (req.method == 'GET') {
|
||
|
var self = this;
|
||
|
|
||
|
this.pollTimeout = setTimeout(function () {
|
||
|
self.packet({ type: 'noop' });
|
||
|
self.log.debug(self.name + ' closed due to exceeded duration');
|
||
|
}, this.manager.get('polling duration') * 1000);
|
||
|
|
||
|
this.log.debug('setting poll timeout');
|
||
|
}
|
||
|
};
|
||
|
|
||
|
/**
|
||
|
* Clears polling timeout
|
||
|
*
|
||
|
* @api private
|
||
|
*/
|
||
|
|
||
|
HTTPPolling.prototype.clearPollTimeout = function () {
|
||
|
if (this.pollTimeout) {
|
||
|
clearTimeout(this.pollTimeout);
|
||
|
this.pollTimeout = null;
|
||
|
this.log.debug('clearing poll timeout');
|
||
|
}
|
||
|
|
||
|
return this;
|
||
|
};
|
||
|
|
||
|
/**
|
||
|
* Override clear timeouts to clear the poll timeout
|
||
|
*
|
||
|
* @api private
|
||
|
*/
|
||
|
|
||
|
HTTPPolling.prototype.clearTimeouts = function () {
|
||
|
HTTPTransport.prototype.clearTimeouts.call(this);
|
||
|
|
||
|
this.clearPollTimeout();
|
||
|
};
|
||
|
|
||
|
/**
|
||
|
* doWrite to clear poll timeout
|
||
|
*
|
||
|
* @api private
|
||
|
*/
|
||
|
|
||
|
HTTPPolling.prototype.doWrite = function () {
|
||
|
this.clearPollTimeout();
|
||
|
};
|
||
|
|
||
|
/**
|
||
|
* Performs a write.
|
||
|
*
|
||
|
* @api private.
|
||
|
*/
|
||
|
|
||
|
HTTPPolling.prototype.write = function (data, close) {
|
||
|
this.doWrite(data);
|
||
|
this.response.end();
|
||
|
this.onClose();
|
||
|
};
|
||
|
|
||
|
/**
|
||
|
* Override end.
|
||
|
*
|
||
|
* @api private
|
||
|
*/
|
||
|
|
||
|
HTTPPolling.prototype.end = function (reason) {
|
||
|
this.clearPollTimeout();
|
||
|
return HTTPTransport.prototype.end.call(this, reason);
|
||
|
};
|
||
|
|