UNPKG

mediasfu-reactnative

Version:
97 lines 4.89 kB
/** * Processes consumer transports by pausing and resuming them based on certain conditions. * * @param {Object} options - The options for processing consumer transports. * @param {Array} options.consumerTransports - The list of consumer transports to process. * @param {Array} options.lStreams_ - The list of local streams. * @param {Object} options.parameters - The parameters object containing various stream arrays and utility functions. * * @returns {Promise<void>} - A promise that resolves when the processing is complete. * * @throws {Error} - Throws an error if there is an issue processing consumer transports. * * The function performs the following steps: * 1. Destructures and updates the parameters. * 2. Defines a helper function to check if a producerId is valid in given stream arrays. * 3. Filters consumer transports to resume based on certain conditions. * 4. Filters consumer transports to pause based on certain conditions. * 5. Pauses consumer transports after a short delay. * 6. Emits `consumer-pause` event for each filtered transport (not audio). * 7. Emits `consumer-resume` event for each filtered transport (not audio). * * @example * ```typescript * await processConsumerTransports({ * consumerTransports: [transport1, transport2], * lStreams_: [stream1, stream2], * parameters: { * remoteScreenStream: [], * oldAllStreams: [], * newLimitedStreams: [], * sleep: sleepFunction, * getUpdatedAllParams: () => parameters, * }, * }); * ``` */ export async function processConsumerTransports({ consumerTransports, lStreams_, parameters, }) { try { // Destructure parameters and get updated values parameters = parameters.getUpdatedAllParams(); const { remoteScreenStream, oldAllStreams, newLimitedStreams, sleep, } = parameters; // Function to check if the producerId is valid in the given stream arrays // eslint-disable-next-line no-inner-declarations function isValidProducerId(producerId, ...streamArrays) { return (producerId !== null && producerId !== '' && streamArrays.some((streamArray) => (streamArray.length > 0 && streamArray.some((stream) => (stream === null || stream === void 0 ? void 0 : stream.producerId) === producerId)))); } // Get paused consumer transports that are not audio const consumerTransportsToResume = consumerTransports.filter((transport) => { var _a; return isValidProducerId(transport.producerId, lStreams_, remoteScreenStream, oldAllStreams, newLimitedStreams) && ((_a = transport.consumer) === null || _a === void 0 ? void 0 : _a.paused) === true && transport.consumer.kind !== 'audio'; }); // Get unpaused consumer transports that are not audio const consumerTransportsToPause = consumerTransports.filter((transport) => transport.producerId && transport.producerId !== null && transport.producerId !== '' && !lStreams_.some((stream) => stream.producerId === transport.producerId) && transport.consumer && transport.consumer.kind && transport.consumer.paused !== true && transport.consumer.kind !== 'audio' && !remoteScreenStream.some((stream) => stream.producerId === transport.producerId) && !oldAllStreams.some((stream) => stream.producerId === transport.producerId) && !newLimitedStreams.some((stream) => stream.producerId === transport.producerId)); // Pause consumer transports after a short delay await sleep({ ms: 100 }); // Emit consumer.pause() for each filtered transport (not audio) for (const transport of consumerTransportsToPause) { transport.consumer.pause(); transport.socket_.emit('consumer-pause', { serverConsumerId: transport.serverConsumerTransportId }, async () => { // Handle the response if needed }); } // Emit consumer.resume() for each filtered transport (not audio) for (const transport of consumerTransportsToResume) { transport.socket_.emit('consumer-resume', { serverConsumerId: transport.serverConsumerTransportId }, async ({ resumed }) => { if (resumed) { transport.consumer.resume(); } }); } } catch (error) { if (error instanceof Error) { console.error(`Error processing consumer transports: ${error.message}`); } else { console.error('Error processing consumer transports:', error); } // throw new Error(`Error processing consumer transports: ${error.message}`); } } //# sourceMappingURL=processConsumerTransports.js.map