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,106 @@
|
|
|
1
|
+
import { ReorderStreamsType, ReorderStreamsParameters, EventType } from "../types/types";
|
|
2
|
+
|
|
3
|
+
export interface OnScreenChangesParameters extends ReorderStreamsParameters {
|
|
4
|
+
eventType: EventType;
|
|
5
|
+
shareScreenStarted: boolean;
|
|
6
|
+
shared: boolean;
|
|
7
|
+
addForBasic: boolean;
|
|
8
|
+
updateAddForBasic: (value: boolean) => void;
|
|
9
|
+
itemPageLimit: number;
|
|
10
|
+
updateItemPageLimit: (value: number) => void;
|
|
11
|
+
updateMainHeightWidth: (value: number) => void;
|
|
12
|
+
|
|
13
|
+
//mediasfu functions
|
|
14
|
+
reorderStreams: ReorderStreamsType;
|
|
15
|
+
[key: string]: any;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export interface OnScreenChangesOptions {
|
|
19
|
+
changed?: boolean;
|
|
20
|
+
parameters: OnScreenChangesParameters;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
// Export the type definition for the function
|
|
24
|
+
export type OnScreenChangesType = (options: OnScreenChangesOptions) => Promise<void>;
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Handles changes in screen events such as broadcast, chat, and conference.
|
|
28
|
+
*
|
|
29
|
+
* @param {OnScreenChangesOptions} options - The options for handling screen changes.
|
|
30
|
+
* @param {boolean} options.changed - Indicates if the screen has changed.
|
|
31
|
+
* @param {object} options.parameters - The parameters for handling screen changes.
|
|
32
|
+
* @param {string} options.parameters.eventType - The type of event (e.g., "broadcast", "chat", "conference").
|
|
33
|
+
* @param {boolean} options.parameters.shareScreenStarted - Indicates if screen sharing has started.
|
|
34
|
+
* @param {boolean} options.parameters.shared - Indicates if the screen is shared.
|
|
35
|
+
* @param {boolean} options.parameters.addForBasic - Flag to add basic controls.
|
|
36
|
+
* @param {function} options.parameters.updateMainHeightWidth - Function to update the main height and width.
|
|
37
|
+
* @param {function} options.parameters.updateAddForBasic - Function to update the addForBasic flag.
|
|
38
|
+
* @param {number} options.parameters.itemPageLimit - The limit for item pages.
|
|
39
|
+
* @param {function} options.parameters.updateItemPageLimit - Function to update the item page limit.
|
|
40
|
+
* @param {function} options.parameters.reorderStreams - Function to reorder streams.
|
|
41
|
+
*
|
|
42
|
+
* @returns {Promise<void>} A promise that resolves when the screen changes have been handled.
|
|
43
|
+
*
|
|
44
|
+
* @throws {Error} Throws an error if there is an issue handling screen changes.
|
|
45
|
+
*
|
|
46
|
+
* @example
|
|
47
|
+
* ```typescript
|
|
48
|
+
* await onScreenChanges({
|
|
49
|
+
* changed: true,
|
|
50
|
+
* parameters: {
|
|
51
|
+
* eventType: 'conference',
|
|
52
|
+
* shareScreenStarted: false,
|
|
53
|
+
* shared: false,
|
|
54
|
+
* addForBasic: false,
|
|
55
|
+
* updateMainHeightWidth: (height) => console.log('Updated height:', height),
|
|
56
|
+
* updateAddForBasic: (value) => console.log('Updated addForBasic:', value),
|
|
57
|
+
* itemPageLimit: 2,
|
|
58
|
+
* updateItemPageLimit: (limit) => console.log('Updated item page limit:', limit),
|
|
59
|
+
* reorderStreams: async (options) => console.log('Reordered streams with options:', options),
|
|
60
|
+
* },
|
|
61
|
+
* });
|
|
62
|
+
* ```
|
|
63
|
+
*/
|
|
64
|
+
|
|
65
|
+
export async function onScreenChanges({ changed, parameters }: OnScreenChangesOptions): Promise<void> {
|
|
66
|
+
try {
|
|
67
|
+
// Destructure parameters
|
|
68
|
+
let {
|
|
69
|
+
eventType,
|
|
70
|
+
shareScreenStarted,
|
|
71
|
+
shared,
|
|
72
|
+
addForBasic,
|
|
73
|
+
updateMainHeightWidth,
|
|
74
|
+
updateAddForBasic,
|
|
75
|
+
itemPageLimit,
|
|
76
|
+
updateItemPageLimit,
|
|
77
|
+
|
|
78
|
+
//mediasfu functions
|
|
79
|
+
reorderStreams,
|
|
80
|
+
} = parameters;
|
|
81
|
+
|
|
82
|
+
// Remove element with id 'controlButtons'
|
|
83
|
+
addForBasic = false;
|
|
84
|
+
updateAddForBasic(addForBasic);
|
|
85
|
+
|
|
86
|
+
if (eventType === "broadcast" || eventType === "chat") {
|
|
87
|
+
addForBasic = true;
|
|
88
|
+
updateAddForBasic(addForBasic);
|
|
89
|
+
|
|
90
|
+
itemPageLimit = eventType === "broadcast" ? 1 : 2;
|
|
91
|
+
updateItemPageLimit(itemPageLimit);
|
|
92
|
+
updateMainHeightWidth(eventType === "broadcast" ? 100 : 0);
|
|
93
|
+
} else {
|
|
94
|
+
if (eventType === "conference" && !(shareScreenStarted || shared)) {
|
|
95
|
+
updateMainHeightWidth(0);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
// Update the mini cards grid
|
|
100
|
+
await reorderStreams({ add: false, screenChanged: changed, parameters });
|
|
101
|
+
} catch (error) {
|
|
102
|
+
// Handle errors during the process of handling screen changes
|
|
103
|
+
console.log("Error handling screen changes:", (error as Error).message);
|
|
104
|
+
// throw error;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
// Stub export for prepopulateUserMedia
|
|
2
|
+
// This is a React component in the original and not needed for the shared package
|
|
3
|
+
|
|
4
|
+
export interface PrepopulateUserMediaParameters {
|
|
5
|
+
[key: string]: any;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
export interface PrepopulateUserMediaOptions {
|
|
9
|
+
name: string;
|
|
10
|
+
parameters: PrepopulateUserMediaParameters;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export type PrepopulateUserMediaType = (options: PrepopulateUserMediaOptions) => Promise<void>;
|
|
14
|
+
|
|
15
|
+
export const prepopulateUserMedia: PrepopulateUserMediaType = async () => {
|
|
16
|
+
// Stub implementation - actual logic handled in framework-specific packages
|
|
17
|
+
console.warn('prepopulateUserMedia called on shared package - should be implemented in framework package');
|
|
18
|
+
};
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
import { Stream, Participant, Transport, SleepType } from "../types/types";
|
|
2
|
+
|
|
3
|
+
export interface ProcessConsumerTransportsParameters {
|
|
4
|
+
remoteScreenStream: Stream[];
|
|
5
|
+
oldAllStreams: (Stream | Participant)[];
|
|
6
|
+
newLimitedStreams: (Stream | Participant)[];
|
|
7
|
+
|
|
8
|
+
// mediasfu functions
|
|
9
|
+
sleep: SleepType;
|
|
10
|
+
getUpdatedAllParams: () => ProcessConsumerTransportsParameters;
|
|
11
|
+
[key: string]: any;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export interface ProcessConsumerTransportsOptions {
|
|
15
|
+
consumerTransports: Transport[];
|
|
16
|
+
lStreams_: (Stream | Participant)[];
|
|
17
|
+
parameters: ProcessConsumerTransportsParameters;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
// Export the type definition for the function
|
|
21
|
+
export type ProcessConsumerTransportsType = (options: ProcessConsumerTransportsOptions) => Promise<void>;
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Processes consumer transports by pausing and resuming them based on certain conditions.
|
|
25
|
+
*
|
|
26
|
+
* @param {Object} options - The options for processing consumer transports.
|
|
27
|
+
* @param {Array} options.consumerTransports - The list of consumer transports to process.
|
|
28
|
+
* @param {Array} options.lStreams_ - The list of local streams.
|
|
29
|
+
* @param {Object} options.parameters - The parameters object containing various stream arrays and utility functions.
|
|
30
|
+
*
|
|
31
|
+
* @returns {Promise<void>} - A promise that resolves when the processing is complete.
|
|
32
|
+
*
|
|
33
|
+
* @throws {Error} - Throws an error if there is an issue processing consumer transports.
|
|
34
|
+
*
|
|
35
|
+
* The function performs the following steps:
|
|
36
|
+
* 1. Destructures and updates the parameters.
|
|
37
|
+
* 2. Defines a helper function to check if a producerId is valid in given stream arrays.
|
|
38
|
+
* 3. Filters consumer transports to resume based on certain conditions.
|
|
39
|
+
* 4. Filters consumer transports to pause based on certain conditions.
|
|
40
|
+
* 5. Pauses consumer transports after a short delay.
|
|
41
|
+
* 6. Emits `consumer-pause` event for each filtered transport (not audio).
|
|
42
|
+
* 7. Emits `consumer-resume` event for each filtered transport (not audio).
|
|
43
|
+
*
|
|
44
|
+
* @example
|
|
45
|
+
* ```typescript
|
|
46
|
+
* await processConsumerTransports({
|
|
47
|
+
* consumerTransports: [transport1, transport2],
|
|
48
|
+
* lStreams_: [stream1, stream2],
|
|
49
|
+
* parameters: {
|
|
50
|
+
* remoteScreenStream: [],
|
|
51
|
+
* oldAllStreams: [],
|
|
52
|
+
* newLimitedStreams: [],
|
|
53
|
+
* sleep: sleepFunction,
|
|
54
|
+
* getUpdatedAllParams: () => parameters,
|
|
55
|
+
* },
|
|
56
|
+
* });
|
|
57
|
+
* ```
|
|
58
|
+
*/
|
|
59
|
+
|
|
60
|
+
export async function processConsumerTransports({
|
|
61
|
+
consumerTransports,
|
|
62
|
+
lStreams_,
|
|
63
|
+
parameters,
|
|
64
|
+
}: ProcessConsumerTransportsOptions): Promise<void> {
|
|
65
|
+
try {
|
|
66
|
+
// Destructure parameters and get updated values
|
|
67
|
+
parameters = parameters.getUpdatedAllParams();
|
|
68
|
+
|
|
69
|
+
const {
|
|
70
|
+
remoteScreenStream,
|
|
71
|
+
oldAllStreams,
|
|
72
|
+
newLimitedStreams,
|
|
73
|
+
sleep,
|
|
74
|
+
} = parameters;
|
|
75
|
+
|
|
76
|
+
// Function to check if the producerId is valid in the given stream arrays
|
|
77
|
+
function isValidProducerId(producerId: string, ...streamArrays: (Stream | Participant)[][]): boolean {
|
|
78
|
+
return (
|
|
79
|
+
producerId !== null &&
|
|
80
|
+
producerId !== "" &&
|
|
81
|
+
streamArrays.some((streamArray) => {
|
|
82
|
+
return (
|
|
83
|
+
streamArray.length > 0 &&
|
|
84
|
+
streamArray.some((stream) => stream?.producerId === producerId)
|
|
85
|
+
);
|
|
86
|
+
})
|
|
87
|
+
);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
// Get paused consumer transports that are not audio
|
|
91
|
+
const consumerTransportsToResume = consumerTransports.filter(
|
|
92
|
+
(transport) =>
|
|
93
|
+
isValidProducerId(
|
|
94
|
+
transport.producerId,
|
|
95
|
+
lStreams_,
|
|
96
|
+
remoteScreenStream,
|
|
97
|
+
oldAllStreams,
|
|
98
|
+
newLimitedStreams
|
|
99
|
+
) &&
|
|
100
|
+
transport.consumer?.paused === true &&
|
|
101
|
+
transport.consumer.kind !== "audio"
|
|
102
|
+
);
|
|
103
|
+
|
|
104
|
+
// Get unpaused consumer transports that are not audio
|
|
105
|
+
const consumerTransportsToPause = consumerTransports.filter(
|
|
106
|
+
(transport) =>
|
|
107
|
+
transport.producerId &&
|
|
108
|
+
transport.producerId !== null &&
|
|
109
|
+
transport.producerId !== "" &&
|
|
110
|
+
!lStreams_.some(
|
|
111
|
+
(stream) => stream.producerId === transport.producerId
|
|
112
|
+
) &&
|
|
113
|
+
transport.consumer &&
|
|
114
|
+
transport.consumer.kind &&
|
|
115
|
+
transport.consumer.paused !== true &&
|
|
116
|
+
transport.consumer.kind !== "audio" &&
|
|
117
|
+
!remoteScreenStream.some((stream) => stream.producerId === transport.producerId) &&
|
|
118
|
+
!oldAllStreams.some((stream) => stream.producerId === transport.producerId) &&
|
|
119
|
+
!newLimitedStreams.some((stream) => stream.producerId === transport.producerId)
|
|
120
|
+
);
|
|
121
|
+
|
|
122
|
+
// Pause consumer transports after a short delay
|
|
123
|
+
await sleep({ ms: 100 });
|
|
124
|
+
|
|
125
|
+
// Emit consumer.pause() for each filtered transport (not audio)
|
|
126
|
+
for (const transport of consumerTransportsToPause) {
|
|
127
|
+
transport.consumer.pause();
|
|
128
|
+
transport.socket_.emit(
|
|
129
|
+
"consumer-pause",
|
|
130
|
+
{ serverConsumerId: transport.serverConsumerTransportId },
|
|
131
|
+
async () => {
|
|
132
|
+
// Handle the response if needed
|
|
133
|
+
}
|
|
134
|
+
);
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
// Emit consumer.resume() for each filtered transport (not audio)
|
|
138
|
+
for (const transport of consumerTransportsToResume) {
|
|
139
|
+
transport.socket_.emit(
|
|
140
|
+
"consumer-resume",
|
|
141
|
+
{ serverConsumerId: transport.serverConsumerTransportId },
|
|
142
|
+
async ({ resumed }: { resumed: boolean }) => {
|
|
143
|
+
if (resumed) {
|
|
144
|
+
transport.consumer.resume();
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
);
|
|
148
|
+
}
|
|
149
|
+
} catch (error) {
|
|
150
|
+
if (error instanceof Error) {
|
|
151
|
+
console.error(`Error processing consumer transports: ${error.message}`);
|
|
152
|
+
} else {
|
|
153
|
+
console.error('Error processing consumer transports:', error);
|
|
154
|
+
}
|
|
155
|
+
// throw new Error(`Error processing consumer transports: ${error.message}`);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import { Stream, Transport, Participant, SleepType } from "../types/types";
|
|
2
|
+
|
|
3
|
+
export interface ProcessConsumerTransportsAudioParameters {
|
|
4
|
+
|
|
5
|
+
// mediasfu functions
|
|
6
|
+
sleep: SleepType;
|
|
7
|
+
[key: string]: any;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export interface ProcessConsumerTransportsAudioOptions {
|
|
11
|
+
consumerTransports: Transport[];
|
|
12
|
+
lStreams: (Stream | Participant)[];
|
|
13
|
+
parameters: ProcessConsumerTransportsAudioParameters;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
// Export the type definition for the function
|
|
17
|
+
export type ProcessConsumerTransportsAudioType = (
|
|
18
|
+
options: ProcessConsumerTransportsAudioOptions
|
|
19
|
+
) => Promise<void>;
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Processes consumer transports for audio streams by pausing and resuming them based on their current state and the provided streams.
|
|
23
|
+
*
|
|
24
|
+
* @param {Object} options - The options for processing consumer transports.
|
|
25
|
+
* @param {Array} options.consumerTransports - The list of consumer transports to process.
|
|
26
|
+
* @param {Array} options.lStreams - The list of local streams to check against.
|
|
27
|
+
* @param {Object} options.parameters - Additional parameters for processing.
|
|
28
|
+
* @param {Function} options.parameters.sleep - A function to pause execution for a specified duration.
|
|
29
|
+
*
|
|
30
|
+
* @returns {Promise<void>} A promise that resolves when the processing is complete.
|
|
31
|
+
*
|
|
32
|
+
* @throws Will throw an error if there is an issue processing the consumer transports.
|
|
33
|
+
*
|
|
34
|
+
* @example
|
|
35
|
+
* ```typescript
|
|
36
|
+
* await processConsumerTransportsAudio({
|
|
37
|
+
* consumerTransports: [transport1, transport2],
|
|
38
|
+
* lStreams: [stream1, stream2],
|
|
39
|
+
* parameters: {
|
|
40
|
+
* sleep: sleepFunction,
|
|
41
|
+
* },
|
|
42
|
+
* });
|
|
43
|
+
* ```
|
|
44
|
+
*/
|
|
45
|
+
|
|
46
|
+
export const processConsumerTransportsAudio = async ({
|
|
47
|
+
consumerTransports,
|
|
48
|
+
lStreams,
|
|
49
|
+
parameters,
|
|
50
|
+
}: ProcessConsumerTransportsAudioOptions): Promise<void> => {
|
|
51
|
+
try {
|
|
52
|
+
const { sleep } = parameters;
|
|
53
|
+
|
|
54
|
+
// Function to check if the producerId is valid in the given stream arrays
|
|
55
|
+
const isValidProducerId = (producerId: string, ...streamArrays: (Stream | Participant)[][]): boolean => {
|
|
56
|
+
return (
|
|
57
|
+
producerId !== null &&
|
|
58
|
+
producerId !== "" &&
|
|
59
|
+
streamArrays.some((streamArray) => {
|
|
60
|
+
return (
|
|
61
|
+
streamArray.length > 0 &&
|
|
62
|
+
streamArray.some((stream) => stream?.producerId === producerId)
|
|
63
|
+
);
|
|
64
|
+
})
|
|
65
|
+
);
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
// Get paused consumer transports that are audio
|
|
69
|
+
const consumerTransportsToResume = consumerTransports.filter(
|
|
70
|
+
(transport) =>
|
|
71
|
+
isValidProducerId(transport.producerId, lStreams) &&
|
|
72
|
+
transport.consumer?.paused === true &&
|
|
73
|
+
transport.consumer.kind === "audio"
|
|
74
|
+
);
|
|
75
|
+
|
|
76
|
+
// Get unpaused consumer transports that are audio
|
|
77
|
+
const consumerTransportsToPause = consumerTransports.filter(
|
|
78
|
+
(transport) =>
|
|
79
|
+
transport.producerId &&
|
|
80
|
+
transport.producerId !== null &&
|
|
81
|
+
transport.producerId !== "" &&
|
|
82
|
+
!lStreams.some(
|
|
83
|
+
(stream) => stream.producerId === transport.producerId
|
|
84
|
+
) &&
|
|
85
|
+
transport.consumer &&
|
|
86
|
+
transport.consumer.kind &&
|
|
87
|
+
transport.consumer.paused !== true &&
|
|
88
|
+
transport.consumer.kind === "audio"
|
|
89
|
+
);
|
|
90
|
+
|
|
91
|
+
await sleep({ms:100});
|
|
92
|
+
|
|
93
|
+
// Emit consumer.pause() for each transport to pause
|
|
94
|
+
for (const transport of consumerTransportsToPause) {
|
|
95
|
+
transport.consumer.pause();
|
|
96
|
+
transport.socket_.emit(
|
|
97
|
+
"consumer-pause",
|
|
98
|
+
{ serverConsumerId: transport.serverConsumerTransportId },
|
|
99
|
+
async () => {
|
|
100
|
+
// Handle the response if needed
|
|
101
|
+
}
|
|
102
|
+
);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
// Emit consumer.resume() for each transport to resume
|
|
106
|
+
for (const transport of consumerTransportsToResume) {
|
|
107
|
+
transport.socket_.emit(
|
|
108
|
+
"consumer-resume",
|
|
109
|
+
{ serverConsumerId: transport.serverConsumerTransportId },
|
|
110
|
+
async ({ resumed }: { resumed: boolean }) => {
|
|
111
|
+
if (resumed) {
|
|
112
|
+
transport.consumer.resume();
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
);
|
|
116
|
+
}
|
|
117
|
+
} catch (error) {
|
|
118
|
+
console.error("Error in processConsumerTransportsAudio:", error);
|
|
119
|
+
}
|
|
120
|
+
};
|
|
121
|
+
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import { ScreenState, CompareScreenStatesParameters, CompareScreenStatesType, CompareActiveNamesParameters, CompareActiveNamesType } from '../types/types';
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
export interface RePortParameters extends CompareScreenStatesParameters, CompareActiveNamesParameters {
|
|
5
|
+
islevel: string;
|
|
6
|
+
mainScreenPerson: string;
|
|
7
|
+
adminOnMainScreen: boolean;
|
|
8
|
+
mainScreenFilled: boolean;
|
|
9
|
+
recordStarted: boolean;
|
|
10
|
+
recordStopped: boolean;
|
|
11
|
+
recordPaused: boolean;
|
|
12
|
+
recordResumed: boolean;
|
|
13
|
+
screenStates: ScreenState[];
|
|
14
|
+
prevScreenStates: ScreenState[];
|
|
15
|
+
updateScreenStates: (states: ScreenState[]) => void;
|
|
16
|
+
updatePrevScreenStates: (states: ScreenState[]) => void;
|
|
17
|
+
|
|
18
|
+
// mediasfu functions
|
|
19
|
+
compareActiveNames: CompareActiveNamesType;
|
|
20
|
+
compareScreenStates: CompareScreenStatesType;
|
|
21
|
+
|
|
22
|
+
getUpdatedAllParams: () => RePortParameters;
|
|
23
|
+
[key: string]: any;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export interface RePortOptions {
|
|
27
|
+
restart?: boolean;
|
|
28
|
+
parameters: RePortParameters;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
// Export the type definition for the function
|
|
33
|
+
export type RePortType = (options: RePortOptions) => Promise<void>;
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* RePort function that handles the reporting logic based on the provided parameters.
|
|
37
|
+
*
|
|
38
|
+
* @param {RePortOptions} options - The options for the rePort function.
|
|
39
|
+
* @param {boolean} [options.restart=false] - Flag indicating whether to restart the process.
|
|
40
|
+
* @param {Object} options.parameters - The parameters object containing various states and functions.
|
|
41
|
+
* @param {Function} options.parameters.getUpdatedAllParams - Function to get updated parameters.
|
|
42
|
+
* @param {string} options.parameters.islevel - The current level of the process.
|
|
43
|
+
* @param {string} options.parameters.mainScreenPerson - The person on the main screen.
|
|
44
|
+
* @param {boolean} options.parameters.adminOnMainScreen - Flag indicating if admin is on the main screen.
|
|
45
|
+
* @param {boolean} options.parameters.mainScreenFilled - Flag indicating if the main screen is filled.
|
|
46
|
+
* @param {boolean} options.parameters.recordStarted - Flag indicating if recording has started.
|
|
47
|
+
* @param {boolean} options.parameters.recordStopped - Flag indicating if recording has stopped.
|
|
48
|
+
* @param {boolean} options.parameters.recordPaused - Flag indicating if recording is paused.
|
|
49
|
+
* @param {boolean} options.parameters.recordResumed - Flag indicating if recording has resumed.
|
|
50
|
+
* @param {Array} options.parameters.screenStates - Array of current screen states.
|
|
51
|
+
* @param {Function} options.parameters.updateScreenStates - Function to update the current screen states.
|
|
52
|
+
* @param {Function} options.parameters.updatePrevScreenStates - Function to update the previous screen states.
|
|
53
|
+
* @param {Function} options.parameters.compareActiveNames - Function to compare active names.
|
|
54
|
+
* @param {Function} options.parameters.compareScreenStates - Function to compare screen states.
|
|
55
|
+
*
|
|
56
|
+
* @returns {Promise<void>} A promise that resolves when the reporting process is complete.
|
|
57
|
+
*
|
|
58
|
+
* @throws {Error} Throws an error if there is an issue during the reporting process.
|
|
59
|
+
*
|
|
60
|
+
* @example
|
|
61
|
+
* ```typescript
|
|
62
|
+
* await rePort({
|
|
63
|
+
* restart: false,
|
|
64
|
+
* parameters: {
|
|
65
|
+
* islevel: "2",
|
|
66
|
+
* mainScreenPerson: "John Doe",
|
|
67
|
+
* // other parameters...
|
|
68
|
+
* },
|
|
69
|
+
* });
|
|
70
|
+
* ```
|
|
71
|
+
*/
|
|
72
|
+
|
|
73
|
+
export async function rePort({ restart = false, parameters }: RePortOptions): Promise<void> {
|
|
74
|
+
const { getUpdatedAllParams } = parameters;
|
|
75
|
+
parameters = getUpdatedAllParams();
|
|
76
|
+
|
|
77
|
+
try {
|
|
78
|
+
// Destructure parameters
|
|
79
|
+
const {
|
|
80
|
+
islevel,
|
|
81
|
+
mainScreenPerson,
|
|
82
|
+
adminOnMainScreen,
|
|
83
|
+
mainScreenFilled,
|
|
84
|
+
recordStarted,
|
|
85
|
+
recordStopped,
|
|
86
|
+
recordPaused,
|
|
87
|
+
recordResumed,
|
|
88
|
+
screenStates,
|
|
89
|
+
updateScreenStates,
|
|
90
|
+
updatePrevScreenStates,
|
|
91
|
+
compareActiveNames,
|
|
92
|
+
compareScreenStates,
|
|
93
|
+
} = parameters;
|
|
94
|
+
|
|
95
|
+
if (recordStarted || recordResumed) {
|
|
96
|
+
if (recordStopped || recordPaused) {
|
|
97
|
+
// Recording stopped or paused, do nothing
|
|
98
|
+
} else {
|
|
99
|
+
if (islevel === "2") {
|
|
100
|
+
const previousScreenStates = [...screenStates];
|
|
101
|
+
updatePrevScreenStates(previousScreenStates);
|
|
102
|
+
|
|
103
|
+
const currentScreenStates = [
|
|
104
|
+
{ mainScreenPerson, adminOnMainScreen, mainScreenFilled },
|
|
105
|
+
];
|
|
106
|
+
updateScreenStates(currentScreenStates);
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
if (restart) {
|
|
110
|
+
await compareActiveNames({ restart, parameters });
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
await compareActiveNames({ restart, parameters });
|
|
114
|
+
await compareScreenStates({ restart, parameters });
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
} catch (error) {
|
|
119
|
+
console.log("Error during rePorting: ", error);
|
|
120
|
+
// throw new Error(`Error during rePorting: ${error.message}`);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
|