UNPKG

mediasfu-reactnative

Version:
162 lines 7.4 kB
/** * Handles the reception and processing of all members' data. * * @param {Object} options - The options for the function. * @param {Array} options.members - The list of members. * @param {Settings} options.settings - The settings for audio, video, screenshare, and chat. * @param {string} [options.coHoste] - Optional co-host information. * @param {CoHostResponsibility[]} [options.coHostRes] - Optional co-host responsibility information. * @param {AllMembersRestParameters} options.parameters - The parameters for the function. * @param {ConsumeSocket[]} options.consume_sockets - The sockets to consume. * @param {string} options.apiUserName - The API username. * @param {string} options.apiKey - The API key. * @param {string} options.apiToken - The API token. * * @returns {Promise<void>} A promise that resolves when the function completes. * * @example * ```typescript * await allMembersRest({ * members: memberList, * settings: { audio: 'on', video: 'on', screenshare: 'off', chat: 'on' }, * coHoste: 'coHostName', * coHostRes: [{ type: 'moderate', allowed: true }], * parameters: allParams, * consume_sockets: [socket1, socket2], * apiUserName: 'apiUser', * apiKey: 'apiKey123', * apiToken: 'tokenXYZ' * }); * ``` */ export const allMembersRest = async ({ members, settings, coHoste, coHostRes, parameters, consume_sockets, apiUserName, apiKey, apiToken, }) => { let { participantsAll, participants, dispActiveNames, requestList, coHost, coHostResponsibility, lock_screen, firstAll, membersReceived, roomRecvIPs, deferScreenReceived, screenId, shareScreenStarted, meetingDisplayType, audioSetting, videoSetting, screenshareSetting, chatSetting, socket, updateParticipantsAll, updateParticipants, updateRequestList, updateCoHost, updateCoHostResponsibility, updateFirstAll, updateMembersReceived, updateDeferScreenReceived, updateShareScreenStarted, updateAudioSetting, updateVideoSetting, updateScreenshareSetting, updateChatSetting, updateConsume_sockets, updateRoomRecvIPs, updateIsLoadingModalVisible, onScreenChanges, connectIps, connectLocalIps, sleep, reorderStreams, } = parameters; // Filter out banned and suspended participants participantsAll = members.map((participant) => ({ isBanned: participant.isBanned, isSuspended: participant.isSuspended, name: participant.name, audioID: participant.audioID, videoID: participant.videoID, })); updateParticipantsAll(participantsAll); participants = members.filter((participant) => !participant.isBanned && !participant.isSuspended); updateParticipants(participants); // Update UI if dispActiveNames contains participants not in the participants array if (dispActiveNames.length > 0) { const dispActiveNames_ = dispActiveNames.filter((name) => !participants.some((participant) => participant.name === name)); if (dispActiveNames_.length > 0 && membersReceived) { await reorderStreams({ add: false, screenChanged: true, parameters }); } } // check to expect no roomRecvIPs for local instance let onLocal = false; if (roomRecvIPs.length === 1 && roomRecvIPs[0] === 'none') { onLocal = true; } // Check for roomRecvIPs and connect to the server if (!onLocal && !membersReceived) { if (!membersReceived) { if (roomRecvIPs.length < 1) { const checkIPs = setInterval(async () => { if (roomRecvIPs.length > 0) { clearInterval(checkIPs); if (deferScreenReceived && screenId) { shareScreenStarted = true; updateShareScreenStarted(shareScreenStarted); } const [sockets_, ips_] = await connectIps({ consume_sockets, remIP: roomRecvIPs, parameters, apiUserName, apiKey, apiToken, }); if (sockets_ && ips_) { updateConsume_sockets(sockets_); updateRoomRecvIPs(ips_); } membersReceived = true; updateMembersReceived(membersReceived); await sleep({ ms: 250 }); updateIsLoadingModalVisible(false); deferScreenReceived = false; updateDeferScreenReceived(deferScreenReceived); } }, 10); } else { const [sockets_, ips_] = await connectIps({ consume_sockets, remIP: roomRecvIPs, parameters, apiUserName, apiKey, apiToken, }); if (sockets_ && ips_) { updateConsume_sockets(sockets_); updateRoomRecvIPs(ips_); } membersReceived = true; updateMembersReceived(membersReceived); if (deferScreenReceived && screenId) { shareScreenStarted = true; updateShareScreenStarted(shareScreenStarted); } await sleep({ ms: 250 }); updateIsLoadingModalVisible(false); deferScreenReceived = false; updateDeferScreenReceived(deferScreenReceived); } } else { if (screenId) { const host = participants.find((participant) => participant.ScreenID === screenId && participant.ScreenOn === true); if (deferScreenReceived && screenId && host) { shareScreenStarted = true; updateShareScreenStarted(shareScreenStarted); } } } } if (onLocal) { if (connectLocalIps) { await connectLocalIps({ socket: socket, parameters }); } await sleep({ ms: 100 }); updateIsLoadingModalVisible(false); } // Filter requests based on participants requestList = requestList.filter((request) => participants.some((participant) => participant.id === request.id)); updateRequestList(requestList); coHost = coHoste; updateCoHost(coHost); coHostResponsibility = coHostRes; updateCoHostResponsibility(coHostResponsibility); // Handle screen changes if necessary if (!lock_screen && !firstAll) { await onScreenChanges({ parameters }); if (meetingDisplayType !== 'all') { firstAll = true; updateFirstAll(firstAll); } } try { if (membersReceived) { audioSetting = settings[0]; videoSetting = settings[1]; screenshareSetting = settings[2]; chatSetting = settings[3]; updateAudioSetting(audioSetting); updateVideoSetting(videoSetting); updateScreenshareSetting(screenshareSetting); updateChatSetting(chatSetting); } } catch (_a) { /* empty */ } }; //# sourceMappingURL=allMembersRest.js.map