123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151 |
- "use strict";
- var __importDefault = (this && this.__importDefault) || function (mod) {
- return (mod && mod.__esModule) ? mod : { "default": mod };
- };
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.Transport = void 0;
- const engine_io_parser_1 = require("engine.io-parser");
- const component_emitter_1 = require("@socket.io/component-emitter");
- const util_js_1 = require("./util.js");
- const debug_1 = __importDefault(require("debug")); // debug()
- const parseqs_js_1 = require("./contrib/parseqs.js");
- const debug = (0, debug_1.default)("engine.io-client:transport"); // debug()
- class TransportError extends Error {
- constructor(reason, description, context) {
- super(reason);
- this.description = description;
- this.context = context;
- this.type = "TransportError";
- }
- }
- class Transport extends component_emitter_1.Emitter {
- /**
- * Transport abstract constructor.
- *
- * @param {Object} opts - options
- * @protected
- */
- constructor(opts) {
- super();
- this.writable = false;
- (0, util_js_1.installTimerFunctions)(this, opts);
- this.opts = opts;
- this.query = opts.query;
- this.socket = opts.socket;
- }
- /**
- * Emits an error.
- *
- * @param {String} reason
- * @param description
- * @param context - the error context
- * @return {Transport} for chaining
- * @protected
- */
- onError(reason, description, context) {
- super.emitReserved("error", new TransportError(reason, description, context));
- return this;
- }
- /**
- * Opens the transport.
- */
- open() {
- this.readyState = "opening";
- this.doOpen();
- return this;
- }
- /**
- * Closes the transport.
- */
- close() {
- if (this.readyState === "opening" || this.readyState === "open") {
- this.doClose();
- this.onClose();
- }
- return this;
- }
- /**
- * Sends multiple packets.
- *
- * @param {Array} packets
- */
- send(packets) {
- if (this.readyState === "open") {
- this.write(packets);
- }
- else {
- // this might happen if the transport was silently closed in the beforeunload event handler
- debug("transport is not open, discarding packets");
- }
- }
- /**
- * Called upon open
- *
- * @protected
- */
- onOpen() {
- this.readyState = "open";
- this.writable = true;
- super.emitReserved("open");
- }
- /**
- * Called with data.
- *
- * @param {String} data
- * @protected
- */
- onData(data) {
- const packet = (0, engine_io_parser_1.decodePacket)(data, this.socket.binaryType);
- this.onPacket(packet);
- }
- /**
- * Called with a decoded packet.
- *
- * @protected
- */
- onPacket(packet) {
- super.emitReserved("packet", packet);
- }
- /**
- * Called upon close.
- *
- * @protected
- */
- onClose(details) {
- this.readyState = "closed";
- super.emitReserved("close", details);
- }
- /**
- * Pauses the transport, in order not to lose packets during an upgrade.
- *
- * @param onPause
- */
- pause(onPause) { }
- createUri(schema, query = {}) {
- return (schema +
- "://" +
- this._hostname() +
- this._port() +
- this.opts.path +
- this._query(query));
- }
- _hostname() {
- const hostname = this.opts.hostname;
- return hostname.indexOf(":") === -1 ? hostname : "[" + hostname + "]";
- }
- _port() {
- if (this.opts.port &&
- ((this.opts.secure && Number(this.opts.port !== 443)) ||
- (!this.opts.secure && Number(this.opts.port) !== 80))) {
- return ":" + this.opts.port;
- }
- else {
- return "";
- }
- }
- _query(query) {
- const encodedQuery = (0, parseqs_js_1.encode)(query);
- return encodedQuery.length ? "?" + encodedQuery : "";
- }
- }
- exports.Transport = Transport;
|