mediasfu-shared 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +228 -0
- package/dist/index.cjs +7707 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +7285 -0
- package/dist/index.js +7690 -0
- package/dist/index.js.map +1 -0
- package/package.json +78 -0
- package/src/ProducerClient/producerClientEmits/createDeviceClient.ts +68 -0
- package/src/consumers/addVideosGrid.ts +18 -0
- package/src/consumers/autoAdjust.ts +100 -0
- package/src/consumers/calculateRowsAndColumns.ts +51 -0
- package/src/consumers/changeVids.ts +753 -0
- package/src/consumers/checkGrid.ts +100 -0
- package/src/consumers/checkPermission.ts +89 -0
- package/src/consumers/checkScreenShare.ts +114 -0
- package/src/consumers/closeAndResize.ts +401 -0
- package/src/consumers/compareActiveNames.ts +122 -0
- package/src/consumers/compareScreenStates.ts +117 -0
- package/src/consumers/connectIps.ts +175 -0
- package/src/consumers/connectLocalIps.ts +103 -0
- package/src/consumers/connectRecvTransport.ts +158 -0
- package/src/consumers/connectSendTransport.ts +150 -0
- package/src/consumers/connectSendTransportAudio.ts +161 -0
- package/src/consumers/connectSendTransportScreen.ts +169 -0
- package/src/consumers/connectSendTransportVideo.ts +149 -0
- package/src/consumers/consumerResume.ts +25 -0
- package/src/consumers/controlMedia.ts +118 -0
- package/src/consumers/createSendTransport.ts +312 -0
- package/src/consumers/disconnectSendTransportAudio.ts +170 -0
- package/src/consumers/disconnectSendTransportScreen.ts +130 -0
- package/src/consumers/disconnectSendTransportVideo.ts +161 -0
- package/src/consumers/dispStreams.ts +694 -0
- package/src/consumers/generatePageContent.ts +118 -0
- package/src/consumers/getEstimate.ts +124 -0
- package/src/consumers/getPipedProducersAlt.ts +96 -0
- package/src/consumers/getProducersPiped.ts +89 -0
- package/src/consumers/getVideos.ts +107 -0
- package/src/consumers/mixStreams.ts +97 -0
- package/src/consumers/onScreenChanges.ts +106 -0
- package/src/consumers/prepopulateUserMedia.ts +18 -0
- package/src/consumers/processConsumerTransports.ts +157 -0
- package/src/consumers/processConsumerTransportsAudio.ts +121 -0
- package/src/consumers/rePort.ts +123 -0
- package/src/consumers/reUpdateInter.ts +289 -0
- package/src/consumers/readjust.ts +170 -0
- package/src/consumers/receiveAllPipedTransports.ts +77 -0
- package/src/consumers/receiveRoomMessages.ts +55 -0
- package/src/consumers/reorderStreams.ts +246 -0
- package/src/consumers/requestScreenShare.ts +103 -0
- package/src/consumers/resumePauseAudioStreams.ts +174 -0
- package/src/consumers/resumePauseStreams.ts +110 -0
- package/src/consumers/resumeSendTransportAudio.ts +143 -0
- package/src/consumers/signalNewConsumerTransport.ts +179 -0
- package/src/consumers/socketReceiveMethods/joinConsumeRoom.ts +130 -0
- package/src/consumers/socketReceiveMethods/newPipeProducer.ts +138 -0
- package/src/consumers/socketReceiveMethods/producerClosed.ts +102 -0
- package/src/consumers/startShareScreen.ts +124 -0
- package/src/consumers/stopShareScreen.ts +241 -0
- package/src/consumers/streamSuccessAudio.ts +297 -0
- package/src/consumers/streamSuccessAudioSwitch.ts +315 -0
- package/src/consumers/streamSuccessScreen.ts +255 -0
- package/src/consumers/streamSuccessVideo.ts +373 -0
- package/src/consumers/switchUserAudio.ts +140 -0
- package/src/consumers/switchUserVideo.ts +201 -0
- package/src/consumers/switchUserVideoAlt.ts +331 -0
- package/src/consumers/trigger.ts +250 -0
- package/src/consumers/updateMiniCardsGrid.ts +150 -0
- package/src/consumers/updateParticipantAudioDecibels.ts +56 -0
- package/src/index.ts +119 -0
- package/src/methods/background/launchBackground.ts +16 -0
- package/src/methods/breakoutRooms/breakoutRoomUpdated.ts +161 -0
- package/src/methods/breakoutRooms/handleStartBreakout.ts +96 -0
- package/src/methods/breakoutRooms/handleStopBreakout.ts +72 -0
- package/src/methods/breakoutRooms/index.ts +4 -0
- package/src/methods/breakoutRooms/launchBreakoutRooms.ts +31 -0
- package/src/methods/coHost/launchCoHost.ts +28 -0
- package/src/methods/coHostMethods/index.ts +2 -0
- package/src/methods/coHostMethods/modifyCoHostSettings.ts +94 -0
- package/src/methods/displaySettings/index.ts +1 -0
- package/src/methods/displaySettings/launchDisplaySettings.ts +31 -0
- package/src/methods/displaySettings/modifyDisplaySettings.ts +242 -0
- package/src/methods/exit/confirmExit.ts +60 -0
- package/src/methods/exit/index.ts +2 -0
- package/src/methods/exit/launchConfirmExit.ts +29 -0
- package/src/methods/index.ts +5 -0
- package/src/methods/mediaSettings/launchMediaSettings.ts +61 -0
- package/src/methods/menu/launchMenuModal.ts +28 -0
- package/src/methods/message/index.ts +1 -0
- package/src/methods/message/launchMessages.ts +27 -0
- package/src/methods/message/sendMessage.ts +175 -0
- package/src/methods/participants/index.ts +3 -0
- package/src/methods/participants/launchParticipants.ts +25 -0
- package/src/methods/participants/messageParticipants.ts +78 -0
- package/src/methods/participants/muteParticipants.ts +79 -0
- package/src/methods/participants/removeParticipants.ts +97 -0
- package/src/methods/polls/handleCreatePoll.ts +66 -0
- package/src/methods/polls/handleEndPoll.ts +64 -0
- package/src/methods/polls/handleVotePoll.ts +76 -0
- package/src/methods/polls/index.ts +3 -0
- package/src/methods/polls/launchPoll.ts +25 -0
- package/src/methods/prejoin/handleCreateRoom.ts +441 -0
- package/src/methods/prejoin/handleJoinRoom.ts +153 -0
- package/src/methods/prejoin/index.ts +14 -0
- package/src/methods/recording/checkPauseState.ts +57 -0
- package/src/methods/recording/checkResumeState.ts +42 -0
- package/src/methods/recording/confirmRecording.ts +241 -0
- package/src/methods/recording/launchRecording.ts +114 -0
- package/src/methods/recording/recordPauseTimer.ts +52 -0
- package/src/methods/recording/recordResumeTimer.ts +92 -0
- package/src/methods/recording/recordStartTimer.ts +106 -0
- package/src/methods/recording/recordUpdateTimer.ts +49 -0
- package/src/methods/recording/startRecording.ts +268 -0
- package/src/methods/recording/stopRecording.ts +124 -0
- package/src/methods/recording/updateRecording.ts +245 -0
- package/src/methods/requests/index.ts +1 -0
- package/src/methods/requests/launchRequests.ts +25 -0
- package/src/methods/requests/respondToRequests.ts +108 -0
- package/src/methods/settings/index.ts +2 -0
- package/src/methods/settings/launchSettings.ts +25 -0
- package/src/methods/settings/modifySettings.ts +99 -0
- package/src/methods/stream/clickVideo.ts +337 -0
- package/src/methods/stream/index.ts +3 -0
- package/src/methods/stream/switchAudio.ts +73 -0
- package/src/methods/stream/switchVideo.ts +148 -0
- package/src/methods/stream/switchVideoAlt.ts +152 -0
- package/src/methods/utils/checkLimitsAndMakeRequest.ts +103 -0
- package/src/methods/utils/validateAlphanumeric.ts +41 -0
- package/src/methods/waiting/index.ts +1 -0
- package/src/methods/waiting/launchWaiting.ts +26 -0
- package/src/methods/waiting/respondToWaiting.ts +82 -0
- package/src/methods/welcome/handleWelcomeRequest.ts +189 -0
- package/src/methods/welcome/index.ts +5 -0
- package/src/methods/whiteboard/handleStartWhiteboard.ts +65 -0
- package/src/methods/whiteboard/handleStopWhiteboard.ts +48 -0
- package/src/methods/whiteboard/index.ts +4 -0
- package/src/methods/whiteboard/launchConfigureWhiteboard.ts +29 -0
- package/src/producers/producerEmits/joinConRoom.ts +153 -0
- package/src/sockets/SocketManager.ts +232 -0
- package/src/types/shared-base-types.ts +752 -0
- package/src/types/types.ts +84 -0
|
@@ -0,0 +1,289 @@
|
|
|
1
|
+
|
|
2
|
+
import { Participant, Stream, OnScreenChangesType, ReorderStreamsType, ChangeVidsType, OnScreenChangesParameters, ReorderStreamsParameters, ChangeVidsParameters, EventType } from "../types/types";
|
|
3
|
+
export interface ReUpdateInterParameters extends OnScreenChangesParameters, ReorderStreamsParameters, ChangeVidsParameters {
|
|
4
|
+
screenPageLimit: number;
|
|
5
|
+
itemPageLimit: number;
|
|
6
|
+
reorderInterval: number;
|
|
7
|
+
fastReorderInterval: number;
|
|
8
|
+
eventType: EventType;
|
|
9
|
+
participants: Participant[];
|
|
10
|
+
allVideoStreams: (Participant | Stream)[];
|
|
11
|
+
shared: boolean;
|
|
12
|
+
shareScreenStarted: boolean;
|
|
13
|
+
adminNameStream?: string;
|
|
14
|
+
screenShareNameStream?: string;
|
|
15
|
+
updateMainWindow: boolean;
|
|
16
|
+
sortAudioLoudness: boolean;
|
|
17
|
+
lastReorderTime: number;
|
|
18
|
+
newLimitedStreams: (Participant | Stream)[];
|
|
19
|
+
newLimitedStreamsIDs: string[];
|
|
20
|
+
oldSoundIds: string[];
|
|
21
|
+
updateUpdateMainWindow: (value: boolean) => void;
|
|
22
|
+
updateSortAudioLoudness: (value: boolean) => void;
|
|
23
|
+
updateLastReorderTime: (value: number) => void;
|
|
24
|
+
updateNewLimitedStreams: (streams: (Participant | Stream)[]) => void;
|
|
25
|
+
updateNewLimitedStreamsIDs: (ids: string[]) => void;
|
|
26
|
+
updateOldSoundIds: (ids: string[]) => void;
|
|
27
|
+
|
|
28
|
+
// mediasfu functions
|
|
29
|
+
onScreenChanges: OnScreenChangesType;
|
|
30
|
+
reorderStreams: ReorderStreamsType;
|
|
31
|
+
changeVids: ChangeVidsType;
|
|
32
|
+
|
|
33
|
+
getUpdatedAllParams: () => ReUpdateInterParameters;
|
|
34
|
+
[key: string]: any;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export interface ReUpdateInterOptions {
|
|
38
|
+
name: string;
|
|
39
|
+
add?: boolean;
|
|
40
|
+
force?: boolean;
|
|
41
|
+
average?: number;
|
|
42
|
+
parameters: ReUpdateInterParameters;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
// Export the type definition for the function
|
|
46
|
+
export type ReUpdateInterType = (options: ReUpdateInterOptions) => Promise<void>;
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Updates the interaction state based on the provided options and parameters.
|
|
50
|
+
*
|
|
51
|
+
* @param {ReUpdateInterOptions} options - The options for updating the interaction.
|
|
52
|
+
* @param {string} options.name - The name of the participant.
|
|
53
|
+
* @param {boolean} [options.add=false] - Whether to add the participant to the interaction.
|
|
54
|
+
* @param {boolean} [options.force=false] - Whether to force the update.
|
|
55
|
+
* @param {number} [options.average=127] - The average value used for determining reorder intervals.
|
|
56
|
+
* @param {Object} options.parameters - The parameters for updating the interaction.
|
|
57
|
+
* @param {number} options.parameters.screenPageLimit - The screen page limit.
|
|
58
|
+
* @param {number} options.parameters.itemPageLimit - The item page limit.
|
|
59
|
+
* @param {number} options.parameters.reorderInterval - The reorder interval.
|
|
60
|
+
* @param {number} options.parameters.fastReorderInterval - The fast reorder interval.
|
|
61
|
+
* @param {string} options.parameters.eventType - The type of event.
|
|
62
|
+
* @param {Array} options.parameters.participants - The list of participants.
|
|
63
|
+
* @param {Array} options.parameters.allVideoStreams - The list of all video streams.
|
|
64
|
+
* @param {boolean} options.parameters.shared - Whether the screen is shared.
|
|
65
|
+
* @param {boolean} options.parameters.shareScreenStarted - Whether screen sharing has started.
|
|
66
|
+
* @param {string} options.parameters.adminNameStream - The admin name stream.
|
|
67
|
+
* @param {string} options.parameters.screenShareNameStream - The screen share name stream.
|
|
68
|
+
* @param {boolean} options.parameters.updateMainWindow - Whether to update the main window.
|
|
69
|
+
* @param {boolean} options.parameters.sortAudioLoudness - Whether to sort audio by loudness.
|
|
70
|
+
* @param {number} options.parameters.lastReorderTime - The last reorder time.
|
|
71
|
+
* @param {Array} options.parameters.newLimitedStreams - The list of new limited streams.
|
|
72
|
+
* @param {Array} options.parameters.newLimitedStreamsIDs - The list of new limited stream IDs.
|
|
73
|
+
* @param {Array} options.parameters.oldSoundIds - The list of old sound IDs.
|
|
74
|
+
* @param {Function} options.parameters.updateUpdateMainWindow - Function to update the main window.
|
|
75
|
+
* @param {Function} options.parameters.updateSortAudioLoudness - Function to update the audio loudness sorting.
|
|
76
|
+
* @param {Function} options.parameters.updateLastReorderTime - Function to update the last reorder time.
|
|
77
|
+
* @param {Function} options.parameters.updateNewLimitedStreams - Function to update the new limited streams.
|
|
78
|
+
* @param {Function} options.parameters.updateNewLimitedStreamsIDs - Function to update the new limited stream IDs.
|
|
79
|
+
* @param {Function} options.parameters.updateOldSoundIds - Function to update the old sound IDs.
|
|
80
|
+
* @param {Function} options.parameters.onScreenChanges - Function to handle screen changes.
|
|
81
|
+
* @param {Function} options.parameters.reorderStreams - Function to reorder streams.
|
|
82
|
+
* @param {Function} options.parameters.changeVids - Function to change videos.
|
|
83
|
+
*
|
|
84
|
+
* @returns {Promise<void>} A promise that resolves when the interaction update is complete.
|
|
85
|
+
*
|
|
86
|
+
* @throws {Error} Throws an error if there is an issue during the updating process.
|
|
87
|
+
*
|
|
88
|
+
* @example
|
|
89
|
+
* ```typescript
|
|
90
|
+
* await reUpdateInter({
|
|
91
|
+
* name: 'participant1',
|
|
92
|
+
* add: true,
|
|
93
|
+
* parameters: {
|
|
94
|
+
* screenPageLimit: 4,
|
|
95
|
+
* itemPageLimit: 2,
|
|
96
|
+
* reorderInterval: 500,
|
|
97
|
+
* fastReorderInterval: 200,
|
|
98
|
+
* eventType: 'conference',
|
|
99
|
+
* participants: [...],
|
|
100
|
+
* allVideoStreams: [...],
|
|
101
|
+
* shared: false,
|
|
102
|
+
* shareScreenStarted: false,
|
|
103
|
+
* adminNameStream: 'Admin',
|
|
104
|
+
* screenShareNameStream: 'Screen Share',
|
|
105
|
+
* updateMainWindow: true,
|
|
106
|
+
* sortAudioLoudness: false,
|
|
107
|
+
* lastReorderTime: Date.now(),
|
|
108
|
+
* newLimitedStreams: [],
|
|
109
|
+
* newLimitedStreamsIDs: [],
|
|
110
|
+
* oldSoundIds: [],
|
|
111
|
+
* updateUpdateMainWindow: (value) => { console.log('your logic') },
|
|
112
|
+
* updateSortAudioLoudness: (value) => { console.log('your logic') },
|
|
113
|
+
* updateLastReorderTime: (value) => { console.log('your logic') },
|
|
114
|
+
* updateNewLimitedStreams: (streams) => { console.log('your logic') },
|
|
115
|
+
* updateNewLimitedStreamsIDs: (ids) => { console.log('your logic') },
|
|
116
|
+
* updateOldSoundIds: (ids) => { console.log('your logic') },
|
|
117
|
+
* onScreenChanges: async (options) => { console.log('your logic') },
|
|
118
|
+
* reorderStreams: async (options) => { console.log('your logic') },
|
|
119
|
+
* changeVids: async (options) => { console.log('your logic') },
|
|
120
|
+
* },
|
|
121
|
+
* });
|
|
122
|
+
* ```
|
|
123
|
+
*/
|
|
124
|
+
|
|
125
|
+
|
|
126
|
+
export async function reUpdateInter({
|
|
127
|
+
name,
|
|
128
|
+
add = false,
|
|
129
|
+
force = false,
|
|
130
|
+
average = 127,
|
|
131
|
+
parameters,
|
|
132
|
+
}: ReUpdateInterOptions): Promise<void> {
|
|
133
|
+
let {
|
|
134
|
+
screenPageLimit,
|
|
135
|
+
itemPageLimit,
|
|
136
|
+
reorderInterval,
|
|
137
|
+
fastReorderInterval,
|
|
138
|
+
eventType,
|
|
139
|
+
participants,
|
|
140
|
+
allVideoStreams,
|
|
141
|
+
shared,
|
|
142
|
+
shareScreenStarted,
|
|
143
|
+
adminNameStream,
|
|
144
|
+
screenShareNameStream,
|
|
145
|
+
updateMainWindow,
|
|
146
|
+
sortAudioLoudness,
|
|
147
|
+
lastReorderTime,
|
|
148
|
+
newLimitedStreams,
|
|
149
|
+
newLimitedStreamsIDs,
|
|
150
|
+
oldSoundIds,
|
|
151
|
+
updateUpdateMainWindow,
|
|
152
|
+
updateSortAudioLoudness,
|
|
153
|
+
updateLastReorderTime,
|
|
154
|
+
updateNewLimitedStreams,
|
|
155
|
+
updateNewLimitedStreamsIDs,
|
|
156
|
+
updateOldSoundIds,
|
|
157
|
+
|
|
158
|
+
//mediasfu functions
|
|
159
|
+
onScreenChanges,
|
|
160
|
+
reorderStreams,
|
|
161
|
+
changeVids,
|
|
162
|
+
} = parameters;
|
|
163
|
+
|
|
164
|
+
if (eventType === "broadcast" || eventType === "chat") {
|
|
165
|
+
return;
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
let refLimit = screenPageLimit - 1;
|
|
169
|
+
|
|
170
|
+
if (!(shareScreenStarted || shared)) {
|
|
171
|
+
refLimit = itemPageLimit - 1;
|
|
172
|
+
|
|
173
|
+
if (add) {
|
|
174
|
+
const currentTime = Date.now();
|
|
175
|
+
if (
|
|
176
|
+
(currentTime - lastReorderTime >= reorderInterval && average > 128.5) ||
|
|
177
|
+
(average > 130 && currentTime - lastReorderTime >= fastReorderInterval)
|
|
178
|
+
) {
|
|
179
|
+
lastReorderTime = currentTime;
|
|
180
|
+
sortAudioLoudness = true;
|
|
181
|
+
if (eventType === "conference") {
|
|
182
|
+
await onScreenChanges({ changed: true, parameters });
|
|
183
|
+
} else {
|
|
184
|
+
await reorderStreams({ add: false, screenChanged: true, parameters });
|
|
185
|
+
}
|
|
186
|
+
sortAudioLoudness = false;
|
|
187
|
+
|
|
188
|
+
updateSortAudioLoudness(sortAudioLoudness);
|
|
189
|
+
updateUpdateMainWindow(updateMainWindow);
|
|
190
|
+
updateLastReorderTime(lastReorderTime);
|
|
191
|
+
|
|
192
|
+
return;
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
let videoID: string | null = null;
|
|
198
|
+
if (shareScreenStarted || shared) {
|
|
199
|
+
if (add) {
|
|
200
|
+
const participant = participants.find((p) => p.name === name);
|
|
201
|
+
videoID = participant?.videoID ?? null;
|
|
202
|
+
|
|
203
|
+
if (!videoID) {
|
|
204
|
+
return;
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
if (!newLimitedStreamsIDs.includes(videoID)) {
|
|
208
|
+
//first check length of newLimitedStreams to not exceed refLimit, if so remove oldSoundID from newLimitedStreams
|
|
209
|
+
if (newLimitedStreams.length > refLimit) {
|
|
210
|
+
let oldoldSounds = [...oldSoundIds];
|
|
211
|
+
for (let i = 0; i < oldSoundIds.length; i++) {
|
|
212
|
+
if (newLimitedStreams.length > refLimit) {
|
|
213
|
+
// remove stream from newLimitedStreams
|
|
214
|
+
if (newLimitedStreams.length < screenPageLimit) {
|
|
215
|
+
return;
|
|
216
|
+
}
|
|
217
|
+
const currentId = oldSoundIds[i];
|
|
218
|
+
if (
|
|
219
|
+
currentId !== screenShareNameStream &&
|
|
220
|
+
currentId !== adminNameStream
|
|
221
|
+
) {
|
|
222
|
+
newLimitedStreams = newLimitedStreams.filter(
|
|
223
|
+
(stream) => stream.producerId !== currentId
|
|
224
|
+
);
|
|
225
|
+
newLimitedStreamsIDs = newLimitedStreamsIDs.filter(
|
|
226
|
+
(id) => id !== currentId
|
|
227
|
+
);
|
|
228
|
+
oldoldSounds = oldoldSounds.filter((id) => id !== currentId);
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
oldSoundIds = [...oldoldSounds];
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
const stream = allVideoStreams.find(
|
|
236
|
+
(s) => s.producerId === videoID
|
|
237
|
+
);
|
|
238
|
+
if (stream && newLimitedStreams.length < screenPageLimit) {
|
|
239
|
+
newLimitedStreams.push(stream);
|
|
240
|
+
newLimitedStreamsIDs.push(videoID);
|
|
241
|
+
if (!oldSoundIds.includes(name)) {
|
|
242
|
+
oldSoundIds.push(name);
|
|
243
|
+
}
|
|
244
|
+
await changeVids({ screenChanged: true, parameters });
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
} else {
|
|
248
|
+
if (!force) {
|
|
249
|
+
try {
|
|
250
|
+
// remove stream from newLimitedStreams
|
|
251
|
+
if (newLimitedStreams.length < screenPageLimit) {
|
|
252
|
+
return;
|
|
253
|
+
}
|
|
254
|
+
newLimitedStreams = newLimitedStreams.filter(
|
|
255
|
+
(stream) => stream.producerId != videoID
|
|
256
|
+
);
|
|
257
|
+
newLimitedStreamsIDs = newLimitedStreamsIDs.filter(
|
|
258
|
+
(id) => id !== videoID
|
|
259
|
+
);
|
|
260
|
+
oldSoundIds = oldSoundIds.filter((id) => id !== name);
|
|
261
|
+
await changeVids({ parameters });
|
|
262
|
+
} catch {
|
|
263
|
+
// do nothing
|
|
264
|
+
}
|
|
265
|
+
} else {
|
|
266
|
+
const participant = participants.find((p) => p.name === name);
|
|
267
|
+
if (participant?.muted) {
|
|
268
|
+
try {
|
|
269
|
+
newLimitedStreams = newLimitedStreams.filter(
|
|
270
|
+
(stream) => stream.producerId !== videoID
|
|
271
|
+
);
|
|
272
|
+
newLimitedStreamsIDs = newLimitedStreamsIDs.filter(
|
|
273
|
+
(id) => id !== videoID
|
|
274
|
+
);
|
|
275
|
+
oldSoundIds = oldSoundIds.filter((id) => id !== name);
|
|
276
|
+
await changeVids({ parameters });
|
|
277
|
+
} catch {
|
|
278
|
+
// do nothing
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
updateNewLimitedStreams(newLimitedStreams);
|
|
285
|
+
updateNewLimitedStreamsIDs(newLimitedStreamsIDs);
|
|
286
|
+
updateOldSoundIds(oldSoundIds);
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
import { PrepopulateUserMediaType, PrepopulateUserMediaParameters, EventType } from '../types/types';
|
|
4
|
+
export interface ReadjustParameters extends PrepopulateUserMediaParameters {
|
|
5
|
+
eventType: EventType;
|
|
6
|
+
shareScreenStarted: boolean;
|
|
7
|
+
shared: boolean;
|
|
8
|
+
mainHeightWidth: number;
|
|
9
|
+
prevMainHeightWidth: number;
|
|
10
|
+
hostLabel: string;
|
|
11
|
+
first_round: boolean;
|
|
12
|
+
lock_screen: boolean;
|
|
13
|
+
updateMainHeightWidth: (value: number) => void;
|
|
14
|
+
|
|
15
|
+
// mediasfu functions
|
|
16
|
+
prepopulateUserMedia: PrepopulateUserMediaType;
|
|
17
|
+
getUpdatedAllParams: () => ReadjustParameters;
|
|
18
|
+
[key: string]: any;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export interface ReadjustOptions {
|
|
22
|
+
n: number;
|
|
23
|
+
state: number;
|
|
24
|
+
parameters: ReadjustParameters;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
// Export the type definition for the function
|
|
28
|
+
export type ReadjustType = (options: ReadjustOptions) => Promise<void>;
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Adjusts the layout parameters based on the provided options.
|
|
32
|
+
*
|
|
33
|
+
* @param {ReadjustOptions} options - The options for readjusting the layout.
|
|
34
|
+
* @param {number} options.n - The number of participants or elements.
|
|
35
|
+
* @param {number} options.state - The current state of the layout.
|
|
36
|
+
* @param {object} options.parameters - The parameters for the layout adjustment.
|
|
37
|
+
* @param {function} options.parameters.getUpdatedAllParams - Function to get updated parameters.
|
|
38
|
+
* @param {string} options.parameters.eventType - The type of event (e.g., "broadcast", "chat", "conference").
|
|
39
|
+
* @param {boolean} options.parameters.shareScreenStarted - Indicates if screen sharing has started.
|
|
40
|
+
* @param {boolean} options.parameters.shared - Indicates if content is being shared.
|
|
41
|
+
* @param {number} options.parameters.mainHeightWidth - The main height and width value.
|
|
42
|
+
* @param {number} options.parameters.prevMainHeightWidth - The previous main height and width value.
|
|
43
|
+
* @param {string} options.parameters.hostLabel - The label for the host.
|
|
44
|
+
* @param {boolean} options.parameters.first_round - Indicates if it is the first round.
|
|
45
|
+
* @param {boolean} options.parameters.lock_screen - Indicates if the screen is locked.
|
|
46
|
+
* @param {function} options.parameters.updateMainHeightWidth - Function to update the main height and width.
|
|
47
|
+
* @param {function} options.parameters.prepopulateUserMedia - Function to prepopulate user media.
|
|
48
|
+
* @returns {Promise<void>} A promise that resolves when the layout adjustment is complete.
|
|
49
|
+
* @throws {Error} Throws an error if there is an issue updating the grid sizes.
|
|
50
|
+
*
|
|
51
|
+
* @example
|
|
52
|
+
* ```typescript
|
|
53
|
+
* await readjust({
|
|
54
|
+
* n: 5,
|
|
55
|
+
* state: 1,
|
|
56
|
+
* parameters: {
|
|
57
|
+
* eventType: 'conference',
|
|
58
|
+
* shareScreenStarted: false,
|
|
59
|
+
* shared: false,
|
|
60
|
+
* mainHeightWidth: 100,
|
|
61
|
+
* prevMainHeightWidth: 80,
|
|
62
|
+
* hostLabel: 'Host Name',
|
|
63
|
+
* first_round: false,
|
|
64
|
+
* lock_screen: false,
|
|
65
|
+
* updateMainHeightWidth: updateMainHeightWidthFunction,
|
|
66
|
+
* getUpdatedAllParams: getUpdatedAllParamsFunction,
|
|
67
|
+
* },
|
|
68
|
+
* });
|
|
69
|
+
* ```
|
|
70
|
+
*/
|
|
71
|
+
|
|
72
|
+
export async function readjust({ n, state, parameters }: ReadjustOptions): Promise<void> {
|
|
73
|
+
let { getUpdatedAllParams } = parameters;
|
|
74
|
+
parameters = getUpdatedAllParams();
|
|
75
|
+
|
|
76
|
+
try {
|
|
77
|
+
// Destructure parameters
|
|
78
|
+
let {
|
|
79
|
+
eventType,
|
|
80
|
+
shareScreenStarted,
|
|
81
|
+
shared,
|
|
82
|
+
mainHeightWidth,
|
|
83
|
+
prevMainHeightWidth,
|
|
84
|
+
hostLabel,
|
|
85
|
+
first_round,
|
|
86
|
+
lock_screen,
|
|
87
|
+
updateMainHeightWidth,
|
|
88
|
+
prepopulateUserMedia,
|
|
89
|
+
} = parameters;
|
|
90
|
+
|
|
91
|
+
if (state === 0) {
|
|
92
|
+
prevMainHeightWidth = mainHeightWidth;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
let val1 = 6;
|
|
96
|
+
let val2 = 12 - val1;
|
|
97
|
+
let cal1 = Math.floor((val1 / 12) * 100);
|
|
98
|
+
let cal2 = 100 - cal1;
|
|
99
|
+
|
|
100
|
+
if (eventType === "broadcast") {
|
|
101
|
+
val1 = 0;
|
|
102
|
+
val2 = 12 - val1;
|
|
103
|
+
|
|
104
|
+
if (n === 0) {
|
|
105
|
+
val1 = 0;
|
|
106
|
+
val2 = 12 - val1;
|
|
107
|
+
}
|
|
108
|
+
} else if (
|
|
109
|
+
eventType === "chat" ||
|
|
110
|
+
(eventType === "conference" && !(shareScreenStarted || shared))
|
|
111
|
+
) {
|
|
112
|
+
val1 = 12;
|
|
113
|
+
val2 = 12 - val1;
|
|
114
|
+
} else {
|
|
115
|
+
if (shareScreenStarted || shared) {
|
|
116
|
+
val2 = 10;
|
|
117
|
+
val1 = 12 - val2;
|
|
118
|
+
} else {
|
|
119
|
+
if (n === 0) {
|
|
120
|
+
val1 = 1;
|
|
121
|
+
val2 = 12 - val1;
|
|
122
|
+
} else if (n >= 1 && n < 4) {
|
|
123
|
+
val1 = 4;
|
|
124
|
+
val2 = 12 - val1;
|
|
125
|
+
} else if (n >= 4 && n < 6) {
|
|
126
|
+
val1 = 6;
|
|
127
|
+
val2 = 12 - val1;
|
|
128
|
+
} else if (n >= 6 && n < 9) {
|
|
129
|
+
val1 = 6;
|
|
130
|
+
val2 = 12 - val1;
|
|
131
|
+
} else if (n >= 9 && n < 12) {
|
|
132
|
+
val1 = 6;
|
|
133
|
+
val2 = 12 - val1;
|
|
134
|
+
} else if (n >= 12 && n < 20) {
|
|
135
|
+
val1 = 8;
|
|
136
|
+
val2 = 12 - val1;
|
|
137
|
+
} else if (n >= 20 && n < 50) {
|
|
138
|
+
val1 = 8;
|
|
139
|
+
val2 = 12 - val1;
|
|
140
|
+
} else {
|
|
141
|
+
val1 = 10;
|
|
142
|
+
val2 = 12 - val1;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
if (state === 0) {
|
|
148
|
+
mainHeightWidth = val2;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
cal1 = Math.floor((val1 / 12) * 100);
|
|
152
|
+
cal2 = 100 - cal1;
|
|
153
|
+
|
|
154
|
+
updateMainHeightWidth(cal2);
|
|
155
|
+
|
|
156
|
+
if (prevMainHeightWidth !== mainHeightWidth) {
|
|
157
|
+
if (!lock_screen && !shared) {
|
|
158
|
+
await prepopulateUserMedia({ name: hostLabel, parameters });
|
|
159
|
+
} else if (!first_round) {
|
|
160
|
+
await prepopulateUserMedia({ name: hostLabel, parameters });
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
} catch (error) {
|
|
164
|
+
if (error instanceof Error) {
|
|
165
|
+
console.log("Error updating grid sizes:", error.message);
|
|
166
|
+
} else {
|
|
167
|
+
console.log("Error updating grid sizes:", error);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
|
|
2
|
+
import { Socket } from "socket.io-client";
|
|
3
|
+
import { GetPipedProducersAltType, GetPipedProducersAltParameters } from "../types/types";
|
|
4
|
+
|
|
5
|
+
export interface ReceiveAllPipedTransportsParameters extends GetPipedProducersAltParameters {
|
|
6
|
+
roomName: string;
|
|
7
|
+
member: string;
|
|
8
|
+
|
|
9
|
+
// mediasfu functions
|
|
10
|
+
getPipedProducersAlt: GetPipedProducersAltType;
|
|
11
|
+
[key: string]: any;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export interface ReceiveAllPipedTransportsOptions {
|
|
15
|
+
nsock: Socket;
|
|
16
|
+
community?: boolean;
|
|
17
|
+
parameters: ReceiveAllPipedTransportsParameters;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
// Export the type definition for the function
|
|
21
|
+
export type ReceiveAllPipedTransportsType = (options: ReceiveAllPipedTransportsOptions) => Promise<void>;
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Receives all piped transports by emitting an event to the server and processing the response.
|
|
25
|
+
*
|
|
26
|
+
* @param {ReceiveAllPipedTransportsOptions} options - The options for receiving all piped transports.
|
|
27
|
+
* @param {Socket} options.nsock - The socket instance used for communication.
|
|
28
|
+
* @param {boolean} options.community - Whether the room is a community edition room.
|
|
29
|
+
* @param {ReceiveAllPipedTransportsParameters} options.parameters - The parameters for the operation.
|
|
30
|
+
* @param {string} options.parameters.roomName - The name of the room.
|
|
31
|
+
* @param {string} options.parameters.member - The member identifier.
|
|
32
|
+
* @param {Function} options.parameters.getPipedProducersAlt - The function to get piped producers for a given level.
|
|
33
|
+
*
|
|
34
|
+
* @returns {Promise<void>} A promise that resolves when the operation is complete.
|
|
35
|
+
*
|
|
36
|
+
* @throws Will log an error message if the operation fails.
|
|
37
|
+
*
|
|
38
|
+
* @example
|
|
39
|
+
* ```typescript
|
|
40
|
+
* await receiveAllPipedTransports({
|
|
41
|
+
* nsock: socketInstance,
|
|
42
|
+
* community: false,
|
|
43
|
+
* parameters: {
|
|
44
|
+
* roomName: 'Room1',
|
|
45
|
+
* member: 'Member1',
|
|
46
|
+
* getPipedProducersAlt: getPipedProducersAltFunction,
|
|
47
|
+
* },
|
|
48
|
+
* });
|
|
49
|
+
* ```
|
|
50
|
+
*/
|
|
51
|
+
|
|
52
|
+
export const receiveAllPipedTransports = async ({ nsock, community=false, parameters }: ReceiveAllPipedTransportsOptions): Promise<void> => {
|
|
53
|
+
try {
|
|
54
|
+
// Destructure parameters
|
|
55
|
+
const { roomName, member, getPipedProducersAlt } = parameters;
|
|
56
|
+
const emitName = community ? "createReceiveAllTransports" : "createReceiveAllTransportsPiped";
|
|
57
|
+
const emitData = community ? { islevel:'0' } : { roomName, member };
|
|
58
|
+
// Emit createReceiveAllTransportsPiped event to the server
|
|
59
|
+
await nsock.emit(
|
|
60
|
+
emitName,
|
|
61
|
+
emitData,
|
|
62
|
+
async ({ producersExist }: { producersExist: boolean }) => {
|
|
63
|
+
// Array of options representing different levels
|
|
64
|
+
const options = ["0", "1", "2"];
|
|
65
|
+
|
|
66
|
+
// If producers exist, loop through each level and get producers
|
|
67
|
+
if (producersExist) {
|
|
68
|
+
for (const islevel of options) {
|
|
69
|
+
await getPipedProducersAlt({ nsock, community, islevel, parameters });
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
);
|
|
74
|
+
} catch (error) {
|
|
75
|
+
console.log("receiveAllPipedTransports error", error);
|
|
76
|
+
}
|
|
77
|
+
};
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { Socket } from "socket.io-client";
|
|
2
|
+
import { Message } from "../types/types";
|
|
3
|
+
export interface ReceiveRoomMessagesOptions {
|
|
4
|
+
socket: Socket;
|
|
5
|
+
roomName: string;
|
|
6
|
+
updateMessages: (messages: Message[]) => void;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
// Export the type definition for the function
|
|
10
|
+
export type ReceiveRoomMessagesType = (options: ReceiveRoomMessagesOptions) => Promise<void>;
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Retrieves messages from a specified room and updates the message state.
|
|
14
|
+
*
|
|
15
|
+
* @param {ReceiveRoomMessagesOptions} options - The options for receiving room messages.
|
|
16
|
+
* @param {Socket} options.socket - The socket instance used for communication.
|
|
17
|
+
* @param {string} options.roomName - The name of the room from which to retrieve messages.
|
|
18
|
+
* @param {Function} options.updateMessages - Function to update the state with retrieved messages.
|
|
19
|
+
*
|
|
20
|
+
* @returns {Promise<void>} A promise that resolves when the messages have been retrieved and updated.
|
|
21
|
+
*
|
|
22
|
+
* @throws Will log an error message if there is an issue retrieving the messages.
|
|
23
|
+
*
|
|
24
|
+
* @example
|
|
25
|
+
* ```typescript
|
|
26
|
+
* await receiveRoomMessages({
|
|
27
|
+
* socket: socketInstance,
|
|
28
|
+
* roomName: 'Room1',
|
|
29
|
+
* updateMessages: (messages) => console.log(messages),
|
|
30
|
+
* });
|
|
31
|
+
* ```
|
|
32
|
+
*/
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
export async function receiveRoomMessages({
|
|
36
|
+
socket,
|
|
37
|
+
roomName,
|
|
38
|
+
updateMessages,
|
|
39
|
+
}: ReceiveRoomMessagesOptions): Promise<void> {
|
|
40
|
+
|
|
41
|
+
try {
|
|
42
|
+
// Retrieve messages from the server
|
|
43
|
+
socket.emit("getMessage", { roomName }, async ({ messages_ }: { messages_: Message[]; }) => {
|
|
44
|
+
updateMessages(messages_);
|
|
45
|
+
});
|
|
46
|
+
} catch (error) {
|
|
47
|
+
// Handle errors if any
|
|
48
|
+
if (error instanceof Error) {
|
|
49
|
+
console.log("Error tuning messages:", error.message);
|
|
50
|
+
} else {
|
|
51
|
+
console.log("Error tuning messages:", error);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|