breakoutRoomUpdated function
- BreakoutRoomUpdatedOptions options
Handles breakout room updates based on the received data and parameters.
Parameters:
options
(BreakoutRoomUpdatedOptions
): Contains:data
: Breakout room update data with information like room status and participants.parameters
: Provides access to state and update functions, including:breakOutRoomStarted
,breakOutRoomEnded
: Track breakout room states.islevel
: Indicates the user’s permission level (e.g., host, participant).participantsAll
,participants
: Lists of all and active participants in the room.- Update functions to change room states, participants, and meeting display type.
Workflow:
-
Host Room Update:
- If the data is for the host (
data.forHost
), it updates the host's room and triggers a screen update.
- If the data is for the host (
-
Participant Updates for Level 2 (Host/Moderator):
- Updates the participant list if the user has a level 2 role and data for members is available.
-
Room Status Change:
- If the room
status
is "started":- Sets
breakOutRoomStarted
to true and updates display to show all participants. - Triggers a port restart for level 2 users.
- Sets
- If the room
status
is "ended":- Sets
breakOutRoomEnded
to true and restores the previous meeting display type.
- Sets
- If the room
Example Usage:
final data = BreakoutRoomUpdatedData(
forHost: true,
newRoom: 1,
status: 'started',
breakoutRooms: [],
members: [
Participant(name: 'John', audioID: 'a1', videoID: 'v1', isBanned: false)
],
);
final parameters = BreakoutRoomUpdatedParameters(
breakOutRoomStarted: false,
breakOutRoomEnded: false,
meetingDisplayType: 'individual',
updateBreakOutRoomStarted: (started) => print('Breakout started: $started'),
// Additional required updates and properties...
);
final options = BreakoutRoomUpdatedOptions(data: data, parameters: parameters);
await breakoutRoomUpdated(options);
Error Handling:
- If an error occurs during the update process, it prints the error message in debug mode.
Implementation
Future<void> breakoutRoomUpdated(BreakoutRoomUpdatedOptions options) async {
final parameters = options.parameters.getUpdatedAllParams();
bool breakOutRoomStarted = parameters.breakOutRoomStarted;
bool breakOutRoomEnded = parameters.breakOutRoomEnded;
String islevel = parameters.islevel;
List<Participant> participantsAll = parameters.participantsAll;
List<Participant> participants = parameters.participants;
String meetingDisplayType = parameters.meetingDisplayType;
String prevMeetingDisplayType = parameters.prevMeetingDisplayType;
final updateBreakoutRooms = parameters.updateBreakoutRooms;
final updateBreakOutRoomStarted = parameters.updateBreakOutRoomStarted;
final updateBreakOutRoomEnded = parameters.updateBreakOutRoomEnded;
final updateHostNewRoom = parameters.updateHostNewRoom;
final updateMeetingDisplayType = parameters.updateMeetingDisplayType;
final updateParticipantsAll = parameters.updateParticipantsAll;
final updateParticipants = parameters.updateParticipants;
final onScreenChanges = parameters.onScreenChanges;
final rePort = parameters.rePort;
final data = options.data;
try {
if (data.forHost != null && data.forHost!) {
if (data.newRoom != null) {
updateHostNewRoom(data.newRoom ?? -1);
}
await onScreenChanges(OnScreenChangesOptions(
changed: true,
parameters: parameters,
));
return;
}
if (islevel == '2' && data.members != null) {
participantsAll = data.members!
.map((participant) => Participant(
isBanned: participant.isBanned,
name: participant.name,
audioID: participant.audioID,
videoID: participant.videoID,
))
.toList();
updateParticipantsAll(participantsAll);
participants =
data.members!.where((participant) => !participant.isBanned!).toList();
updateParticipants(participants);
}
updateBreakoutRooms(data.breakoutRooms!);
if (data.status == 'started' &&
(breakOutRoomStarted || !breakOutRoomEnded)) {
breakOutRoomStarted = true;
breakOutRoomEnded = false;
updateBreakOutRoomStarted(true);
updateBreakOutRoomEnded(false);
prevMeetingDisplayType = meetingDisplayType;
if (meetingDisplayType != 'all') {
meetingDisplayType = 'all';
updateMeetingDisplayType('all');
}
await onScreenChanges(OnScreenChangesOptions(
changed: true,
parameters: parameters,
));
if (islevel == '2') {
await rePort(RePortOptions(restart: true, parameters: parameters));
}
} else if (data.status == 'ended') {
breakOutRoomEnded = true;
updateBreakOutRoomEnded(true);
if (meetingDisplayType != prevMeetingDisplayType) {
updateMeetingDisplayType(prevMeetingDisplayType);
}
await onScreenChanges(OnScreenChangesOptions(
changed: true,
parameters: parameters,
));
if (islevel == '2') {
await rePort(RePortOptions(restart: true, parameters: parameters));
}
} else if (data.status == 'started' && breakOutRoomStarted) {
breakOutRoomStarted = true;
breakOutRoomEnded = false;
updateBreakOutRoomStarted(true);
updateBreakOutRoomEnded(false);
await onScreenChanges(OnScreenChangesOptions(
changed: true,
parameters: parameters,
));
if (islevel == '2') {
await rePort(RePortOptions(restart: true, parameters: parameters));
}
}
} catch (error) {
if (kDebugMode) {
print('Error in breakoutRoomUpdated: $error');
}
}
}