setBreakoutRooms function
Future<HeadlessActionResult>
setBreakoutRooms(
- MediasfuParameters parameters,
- List<
List< rooms, {BreakoutParticipant> > - String newParticipantAction = 'autoAssignNewRoom',
Implementation
Future<HeadlessActionResult> setBreakoutRooms(
MediasfuParameters parameters,
List<List<BreakoutParticipant>> rooms, {
String newParticipantAction = 'autoAssignNewRoom',
}) async {
if (parameters.islevel != '2') {
return const HeadlessActionResult.failure(
'Only the host can change breakout rooms.');
}
if (parameters.socket == null || parameters.roomName.isEmpty) {
return const HeadlessActionResult.failure(
'The room connection is not ready.');
}
try {
final running =
parameters.breakOutRoomStarted && !parameters.breakOutRoomEnded;
final normalized = rooms
.asMap()
.entries
.map((room) => room.value
.map((person) => BreakoutParticipant(
name: person.name,
breakRoom: room.key,
))
.toList(growable: false))
.toList(growable: false);
final response = await _emitAck(
parameters,
running ? 'updateBreakout' : 'startBreakout',
{
'breakoutRooms': normalized
.map((room) => room.map((person) => person.toMap()).toList())
.toList(),
'newParticipantAction': newParticipantAction,
'roomName': parameters.roomName,
},
);
if (response['success'] != true) {
return HeadlessActionResult.failure(response['reason']?.toString() ??
'The breakout rooms could not be updated.');
}
parameters.updateBreakoutRooms(normalized);
parameters.updateBreakOutRoomStarted(true);
parameters.updateBreakOutRoomEnded(false);
return const HeadlessActionResult.success();
} catch (error) {
return HeadlessActionResult.failure(
'The breakout rooms could not be updated: $error');
}
}