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.
127 lines
3.2 KiB
127 lines
3.2 KiB
2 years ago
|
"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 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} options.
|
||
|
* @api private
|
||
|
*/
|
||
|
constructor(opts) {
|
||
|
super();
|
||
|
this.writable = false;
|
||
|
(0, util_js_1.installTimerFunctions)(this, opts);
|
||
|
this.opts = opts;
|
||
|
this.query = opts.query;
|
||
|
this.readyState = "";
|
||
|
this.socket = opts.socket;
|
||
|
}
|
||
|
/**
|
||
|
* Emits an error.
|
||
|
*
|
||
|
* @param {String} reason
|
||
|
* @param description
|
||
|
* @param context - the error context
|
||
|
* @return {Transport} for chaining
|
||
|
* @api protected
|
||
|
*/
|
||
|
onError(reason, description, context) {
|
||
|
super.emitReserved("error", new TransportError(reason, description, context));
|
||
|
return this;
|
||
|
}
|
||
|
/**
|
||
|
* Opens the transport.
|
||
|
*
|
||
|
* @api public
|
||
|
*/
|
||
|
open() {
|
||
|
if ("closed" === this.readyState || "" === this.readyState) {
|
||
|
this.readyState = "opening";
|
||
|
this.doOpen();
|
||
|
}
|
||
|
return this;
|
||
|
}
|
||
|
/**
|
||
|
* Closes the transport.
|
||
|
*
|
||
|
* @api public
|
||
|
*/
|
||
|
close() {
|
||
|
if ("opening" === this.readyState || "open" === this.readyState) {
|
||
|
this.doClose();
|
||
|
this.onClose();
|
||
|
}
|
||
|
return this;
|
||
|
}
|
||
|
/**
|
||
|
* Sends multiple packets.
|
||
|
*
|
||
|
* @param {Array} packets
|
||
|
* @api public
|
||
|
*/
|
||
|
send(packets) {
|
||
|
if ("open" === this.readyState) {
|
||
|
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
|
||
|
*
|
||
|
* @api protected
|
||
|
*/
|
||
|
onOpen() {
|
||
|
this.readyState = "open";
|
||
|
this.writable = true;
|
||
|
super.emitReserved("open");
|
||
|
}
|
||
|
/**
|
||
|
* Called with data.
|
||
|
*
|
||
|
* @param {String} data
|
||
|
* @api protected
|
||
|
*/
|
||
|
onData(data) {
|
||
|
const packet = (0, engine_io_parser_1.decodePacket)(data, this.socket.binaryType);
|
||
|
this.onPacket(packet);
|
||
|
}
|
||
|
/**
|
||
|
* Called with a decoded packet.
|
||
|
*
|
||
|
* @api protected
|
||
|
*/
|
||
|
onPacket(packet) {
|
||
|
super.emitReserved("packet", packet);
|
||
|
}
|
||
|
/**
|
||
|
* Called upon close.
|
||
|
*
|
||
|
* @api protected
|
||
|
*/
|
||
|
onClose(details) {
|
||
|
this.readyState = "closed";
|
||
|
super.emitReserved("close", details);
|
||
|
}
|
||
|
}
|
||
|
exports.Transport = Transport;
|