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.
113 lines
2.7 KiB
113 lines
2.7 KiB
"use strict"; |
|
Object.defineProperty(exports, "__esModule", { value: true }); |
|
exports.Transport = void 0; |
|
const events_1 = require("events"); |
|
const parser_v4 = require("engine.io-parser"); |
|
const parser_v3 = require("./parser-v3/index"); |
|
const debug_1 = require("debug"); |
|
const debug = (0, debug_1.default)("engine:transport"); |
|
/** |
|
* Noop function. |
|
* |
|
* @api private |
|
*/ |
|
function noop() { } |
|
class Transport extends events_1.EventEmitter { |
|
/** |
|
* Transport constructor. |
|
* |
|
* @param {http.IncomingMessage} request |
|
* @api public |
|
*/ |
|
constructor(req) { |
|
super(); |
|
this.readyState = "open"; |
|
this.discarded = false; |
|
this.protocol = req._query.EIO === "4" ? 4 : 3; // 3rd revision by default |
|
this.parser = this.protocol === 4 ? parser_v4 : parser_v3; |
|
} |
|
get readyState() { |
|
return this._readyState; |
|
} |
|
set readyState(state) { |
|
debug("readyState updated from %s to %s (%s)", this._readyState, state, this.name); |
|
this._readyState = state; |
|
} |
|
/** |
|
* Flags the transport as discarded. |
|
* |
|
* @api private |
|
*/ |
|
discard() { |
|
this.discarded = true; |
|
} |
|
/** |
|
* Called with an incoming HTTP request. |
|
* |
|
* @param {http.IncomingMessage} request |
|
* @api protected |
|
*/ |
|
onRequest(req) { |
|
debug("setting request"); |
|
this.req = req; |
|
} |
|
/** |
|
* Closes the transport. |
|
* |
|
* @api private |
|
*/ |
|
close(fn) { |
|
if ("closed" === this.readyState || "closing" === this.readyState) |
|
return; |
|
this.readyState = "closing"; |
|
this.doClose(fn || noop); |
|
} |
|
/** |
|
* Called with a transport error. |
|
* |
|
* @param {String} message error |
|
* @param {Object} error description |
|
* @api protected |
|
*/ |
|
onError(msg, desc) { |
|
if (this.listeners("error").length) { |
|
const err = new Error(msg); |
|
// @ts-ignore |
|
err.type = "TransportError"; |
|
// @ts-ignore |
|
err.description = desc; |
|
this.emit("error", err); |
|
} |
|
else { |
|
debug("ignored transport error %s (%s)", msg, desc); |
|
} |
|
} |
|
/** |
|
* Called with parsed out a packets from the data stream. |
|
* |
|
* @param {Object} packet |
|
* @api protected |
|
*/ |
|
onPacket(packet) { |
|
this.emit("packet", packet); |
|
} |
|
/** |
|
* Called with the encoded packet data. |
|
* |
|
* @param {String} data |
|
* @api protected |
|
*/ |
|
onData(data) { |
|
this.onPacket(this.parser.decodePacket(data)); |
|
} |
|
/** |
|
* Called upon transport close. |
|
* |
|
* @api protected |
|
*/ |
|
onClose() { |
|
this.readyState = "closed"; |
|
this.emit("close"); |
|
} |
|
} |
|
exports.Transport = Transport;
|
|
|