startWhiteboard function

Future<HeadlessActionResult> startWhiteboard(
  1. MediasfuParameters parameters, {
  2. 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');
  }
}