12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- "use strict";
- var __importDefault = (this && this.__importDefault) || function (mod) {
- return (mod && mod.__esModule) ? mod : { "default": mod };
- };
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.WT = void 0;
- const transport_js_1 = require("../transport.js");
- const websocket_constructor_js_1 = require("./websocket-constructor.js");
- const engine_io_parser_1 = require("engine.io-parser");
- const debug_1 = __importDefault(require("debug")); // debug()
- const debug = (0, debug_1.default)("engine.io-client:webtransport"); // debug()
- class WT extends transport_js_1.Transport {
- get name() {
- return "webtransport";
- }
- doOpen() {
- // @ts-ignore
- if (typeof WebTransport !== "function") {
- return;
- }
- // @ts-ignore
- this.transport = new WebTransport(this.createUri("https"), this.opts.transportOptions[this.name]);
- this.transport.closed
- .then(() => {
- debug("transport closed gracefully");
- this.onClose();
- })
- .catch((err) => {
- debug("transport closed due to %s", err);
- this.onError("webtransport error", err);
- });
- // note: we could have used async/await, but that would require some additional polyfills
- this.transport.ready.then(() => {
- this.transport.createBidirectionalStream().then((stream) => {
- const decoderStream = (0, engine_io_parser_1.createPacketDecoderStream)(Number.MAX_SAFE_INTEGER, this.socket.binaryType);
- const reader = stream.readable.pipeThrough(decoderStream).getReader();
- const encoderStream = (0, engine_io_parser_1.createPacketEncoderStream)();
- encoderStream.readable.pipeTo(stream.writable);
- this.writer = encoderStream.writable.getWriter();
- const read = () => {
- reader
- .read()
- .then(({ done, value }) => {
- if (done) {
- debug("session is closed");
- return;
- }
- debug("received chunk: %o", value);
- this.onPacket(value);
- read();
- })
- .catch((err) => {
- debug("an error occurred while reading: %s", err);
- });
- };
- read();
- const packet = { type: "open" };
- if (this.query.sid) {
- packet.data = `{"sid":"${this.query.sid}"}`;
- }
- this.writer.write(packet).then(() => this.onOpen());
- });
- });
- }
- write(packets) {
- this.writable = false;
- for (let i = 0; i < packets.length; i++) {
- const packet = packets[i];
- const lastPacket = i === packets.length - 1;
- this.writer.write(packet).then(() => {
- if (lastPacket) {
- (0, websocket_constructor_js_1.nextTick)(() => {
- this.writable = true;
- this.emitReserved("drain");
- }, this.setTimeoutFn);
- }
- });
- }
- }
- doClose() {
- var _a;
- (_a = this.transport) === null || _a === void 0 ? void 0 : _a.close();
- }
- }
- exports.WT = WT;
|