"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; } /** * 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;