Spaces:
Runtime error
Runtime error
; | |
Object.defineProperty(exports, "__esModule", { value: true }); | |
exports.WebTransport = void 0; | |
const transport_1 = require("../transport"); | |
const debug_1 = require("debug"); | |
const engine_io_parser_1 = require("engine.io-parser"); | |
const debug = (0, debug_1.default)("engine:webtransport"); | |
/** | |
* Reference: https://developer.mozilla.org/en-US/docs/Web/API/WebTransport_API | |
*/ | |
class WebTransport extends transport_1.Transport { | |
constructor(session, stream, reader) { | |
super({ _query: { EIO: "4" } }); | |
this.session = session; | |
const transformStream = (0, engine_io_parser_1.createPacketEncoderStream)(); | |
transformStream.readable.pipeTo(stream.writable).catch(() => { | |
debug("the stream was closed"); | |
}); | |
this.writer = transformStream.writable.getWriter(); | |
(async () => { | |
try { | |
while (true) { | |
const { value, done } = await reader.read(); | |
if (done) { | |
debug("session is closed"); | |
break; | |
} | |
debug("received chunk: %o", value); | |
this.onPacket(value); | |
} | |
} | |
catch (e) { | |
debug("error while reading: %s", e.message); | |
} | |
})(); | |
session.closed.then(() => this.onClose()); | |
this.writable = true; | |
} | |
get name() { | |
return "webtransport"; | |
} | |
get supportsFraming() { | |
return true; | |
} | |
async send(packets) { | |
this.writable = false; | |
try { | |
for (let i = 0; i < packets.length; i++) { | |
const packet = packets[i]; | |
await this.writer.write(packet); | |
} | |
} | |
catch (e) { | |
debug("error while writing: %s", e.message); | |
} | |
this.writable = true; | |
this.emit("drain"); | |
} | |
doClose(fn) { | |
debug("closing WebTransport session"); | |
this.session.close(); | |
fn && fn(); | |
} | |
} | |
exports.WebTransport = WebTransport; | |