UNPKG

mediasoup

Version:

Cutting Edge WebRTC Video Conferencing

165 lines (164 loc) 5.49 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.DirectTransport = void 0; exports.parseDirectTransportDumpResponse = parseDirectTransportDumpResponse; const Logger_1 = require("./Logger"); const enhancedEvents_1 = require("./enhancedEvents"); const errors_1 = require("./errors"); const Transport_1 = require("./Transport"); const notification_1 = require("./fbs/notification"); const FbsDirectTransport = require("./fbs/direct-transport"); const FbsTransport = require("./fbs/transport"); const FbsNotification = require("./fbs/notification"); const FbsRequest = require("./fbs/request"); const logger = new Logger_1.Logger('DirectTransport'); class DirectTransport extends Transport_1.Transport { // DirectTransport data. #data; /** * @private */ constructor(options) { const observer = new enhancedEvents_1.EnhancedEventEmitter(); super(options, observer); logger.debug('constructor()'); this.#data = { // Nothing. }; this.handleWorkerNotifications(); } /** * Observer. * * @override */ get observer() { return super.observer; } /** * Close the DirectTransport. * * @override */ close() { if (this.closed) { return; } super.close(); } /** * Router was closed. * * @private * @override */ routerClosed() { if (this.closed) { return; } super.routerClosed(); } /** * Dump Transport. */ async dump() { logger.debug('dump()'); const response = await this.channel.request(FbsRequest.Method.TRANSPORT_DUMP, undefined, undefined, this.internal.transportId); /* Decode Response. */ const data = new FbsDirectTransport.DumpResponse(); response.body(data); return parseDirectTransportDumpResponse(data); } /** * Get DirectTransport stats. * * @override */ async getStats() { logger.debug('getStats()'); const response = await this.channel.request(FbsRequest.Method.TRANSPORT_GET_STATS, undefined, undefined, this.internal.transportId); /* Decode Response. */ const data = new FbsDirectTransport.GetStatsResponse(); response.body(data); return [parseGetStatsResponse(data)]; } /** * NO-OP method in DirectTransport. * * @override */ async connect() { logger.debug('connect()'); } /** * @override */ // eslint-disable-next-line @typescript-eslint/no-unused-vars async setMaxIncomingBitrate(bitrate) { throw new errors_1.UnsupportedError('setMaxIncomingBitrate() not implemented in DirectTransport'); } /** * @override */ // eslint-disable-next-line @typescript-eslint/no-unused-vars async setMaxOutgoingBitrate(bitrate) { throw new errors_1.UnsupportedError('setMaxOutgoingBitrate() not implemented in DirectTransport'); } /** * @override */ // eslint-disable-next-line @typescript-eslint/no-unused-vars async setMinOutgoingBitrate(bitrate) { throw new errors_1.UnsupportedError('setMinOutgoingBitrate() not implemented in DirectTransport'); } /** * Send RTCP packet. */ sendRtcp(rtcpPacket) { if (!Buffer.isBuffer(rtcpPacket)) { throw new TypeError('rtcpPacket must be a Buffer'); } const builder = this.channel.bufferBuilder; const dataOffset = FbsTransport.SendRtcpNotification.createDataVector(builder, rtcpPacket); const notificationOffset = FbsTransport.SendRtcpNotification.createSendRtcpNotification(builder, dataOffset); this.channel.notify(FbsNotification.Event.TRANSPORT_SEND_RTCP, FbsNotification.Body.Transport_SendRtcpNotification, notificationOffset, this.internal.transportId); } handleWorkerNotifications() { this.channel.on(this.internal.transportId, (event, data) => { switch (event) { case notification_1.Event.TRANSPORT_TRACE: { const notification = new FbsTransport.TraceNotification(); data.body(notification); const trace = (0, Transport_1.parseTransportTraceEventData)(notification); this.safeEmit('trace', trace); // Emit observer event. this.observer.safeEmit('trace', trace); break; } case notification_1.Event.DIRECTTRANSPORT_RTCP: { if (this.closed) { break; } const notification = new FbsDirectTransport.RtcpNotification(); data.body(notification); this.safeEmit('rtcp', Buffer.from(notification.dataArray())); break; } default: { logger.error('ignoring unknown event "%s"', event); } } }); } } exports.DirectTransport = DirectTransport; function parseDirectTransportDumpResponse(binary) { return (0, Transport_1.parseBaseTransportDump)(binary.base()); } function parseGetStatsResponse(binary) { const base = (0, Transport_1.parseBaseTransportStats)(binary.base()); return { ...base, type: 'direct-transport', }; }