|
|
/** * Module dependencies. */
var parser = require('engine.io-parser'); var Emitter = require('component-emitter');
/** * Module exports. */
module.exports = Transport;
/** * Transport abstract constructor. * * @param {Object} options. * @api private */
function Transport (opts) { this.path = opts.path; this.hostname = opts.hostname; this.port = opts.port; this.secure = opts.secure; this.query = opts.query; this.timestampParam = opts.timestampParam; this.timestampRequests = opts.timestampRequests; this.readyState = ''; this.agent = opts.agent || false; this.socket = opts.socket; this.enablesXDR = opts.enablesXDR;
// SSL options for Node.js client
this.pfx = opts.pfx; this.key = opts.key; this.passphrase = opts.passphrase; this.cert = opts.cert; this.ca = opts.ca; this.ciphers = opts.ciphers; this.rejectUnauthorized = opts.rejectUnauthorized; this.forceNode = opts.forceNode;
// other options for Node.js client
this.extraHeaders = opts.extraHeaders; this.localAddress = opts.localAddress; }
/** * Mix in `Emitter`. */
Emitter(Transport.prototype);
/** * Emits an error. * * @param {String} str * @return {Transport} for chaining * @api public */
Transport.prototype.onError = function (msg, desc) { var err = new Error(msg); err.type = 'TransportError'; err.description = desc; this.emit('error', err); return this; };
/** * Opens the transport. * * @api public */
Transport.prototype.open = function () { if ('closed' === this.readyState || '' === this.readyState) { this.readyState = 'opening'; this.doOpen(); }
return this; };
/** * Closes the transport. * * @api private */
Transport.prototype.close = function () { if ('opening' === this.readyState || 'open' === this.readyState) { this.doClose(); this.onClose(); }
return this; };
/** * Sends multiple packets. * * @param {Array} packets * @api private */
Transport.prototype.send = function (packets) { if ('open' === this.readyState) { this.write(packets); } else { throw new Error('Transport not open'); } };
/** * Called upon open * * @api private */
Transport.prototype.onOpen = function () { this.readyState = 'open'; this.writable = true; this.emit('open'); };
/** * Called with data. * * @param {String} data * @api private */
Transport.prototype.onData = function (data) { var packet = parser.decodePacket(data, this.socket.binaryType); this.onPacket(packet); };
/** * Called with a decoded packet. */
Transport.prototype.onPacket = function (packet) { this.emit('packet', packet); };
/** * Called upon close. * * @api private */
Transport.prototype.onClose = function () { this.readyState = 'closed'; this.emit('close'); };
|