startWhiteboard function
Future<HeadlessActionResult>
startWhiteboard(
- MediasfuParameters parameters, {
- List<
WhiteboardUser> ? users,
Implementation
Future<HeadlessActionResult> startWhiteboard(
MediasfuParameters parameters, {
List<WhiteboardUser>? users,
}) async {
if (parameters.breakOutRoomStarted && !parameters.breakOutRoomEnded) {
return const HeadlessActionResult.failure(
'The whiteboard cannot start while breakout rooms are active.');
}
final state = getWhiteboardState(parameters);
if (!state.active && !state.canStart) {
return const HeadlessActionResult.failure(
'You are not allowed to start the whiteboard.');
}
final selected = users ?? state.users;
if (state.limit > 0 && selected.length > state.limit) {
return HeadlessActionResult.failure(
'The whiteboard allows at most ${state.limit} participants.');
}
try {
final response = await _emitAck(
parameters,
state.active ? 'updateWhiteboard' : 'startWhiteboard',
{
'whiteboardUsers': selected.map((entry) => entry.toMap()).toList(),
'roomName': parameters.roomName,
},
);
if (response['success'] != true) {
return HeadlessActionResult.failure(response['reason']?.toString() ??
'The whiteboard could not be started.');
}
parameters.updateWhiteboardStarted(true);
parameters.updateWhiteboardEnded(false);
parameters.updateWhiteboardUsers(selected);
parameters.updateCanStartWhiteboard(false);
return const HeadlessActionResult.success();
} catch (error) {
return HeadlessActionResult.failure(
'The whiteboard could not be started: $error');
}
}