onHandleNewLivekitCall function

dynamic onHandleNewLivekitCall(
  1. dynamic value,
  2. BuildContext context
)

Implementation

onHandleNewLivekitCall(value, BuildContext context) async {
  klivekitPrintDebug('Received value: $value');

  Map<String, dynamic> payload;
  if (value is Map<String, dynamic>) {
    payload = value;
  } else if (value is Map) {
    payload = Map<String, dynamic>.from(value);
  } else {
    klivekitPrintDebug('Payload không hợp lệ: ${value.runtimeType}');
    return;
  }
  klivekitPrintDebug('Parsed payload: $payload');

  MqttPayloadModel mqttPayload = MqttPayloadModel.fromJson(payload);
  klivekitPrintDebug('Mqtt payload type: ${mqttPayload.type}');

  if (!livekitCubit.isBusy && mqttPayload.type == mqttTypeMewMeeting) {
    klivekitPrintDebug('Processing new meeting request');
    MqttPayloadModel<VideoMeeting> mqttPayloadData =
        MqttPayloadModel.fromJson(payload, VideoMeeting.fromJson);
    VideoMeeting meeting = mqttPayloadData.data!;
    klivekitPrintDebug('Meeting data: ${meeting.toJson()}');
    klivekitPrintDebug('Current user ID: $loggedUsernameId');
    klivekitPrintDebug('Allowed participants: ${meeting.participantsAllowed}');

    if (meeting.participantsAllowed?.contains(loggedUsernameId) == true &&
        meeting.scheduledAt == 0) {
      klivekitPrintDebug('User allowed in meeting, proceeding with call setup');
      livekitCubit.resetOffsetFrame(const Size(360, 360 * .6));
      livekitCubit.update(
        isCallComing: true,
        meeting: meeting,
      );
      // await Future.delayed(fromTimestamp(
      //         meeting.room!.waitingDuration! + meeting.room!.startTime!)
      //     .difference(DateTime.now()));
      await Future.delayed(const Duration(seconds: 120));
      if (livekitCubit.state.isCallComing) {
        livekitCubit.update(isCallComing: false);
      }
      // }
    }
  } else if (mqttPayload.type == mqttTypeMeetingCurrentParticipantsChanged) {
    klivekitPrintDebug('Processing participants changed event');
    MqttPayloadModel<VideoMeeting> mqttPayloadData =
        MqttPayloadModel.fromJson(payload, VideoMeeting.fromJson);
    VideoMeeting meeting = mqttPayloadData.data!;
    klivekitPrintDebug(
        'Current participants count: ${meeting.currentParticipants?.length}');
    klivekitPrintDebug(
        'Meeting UUID match: ${livekitCubit.meetingUuid == meeting.uuid}');
    klivekitPrintDebug(
        'Room status: ${livekitCubit.state.room == null ? "null" : "exists"}');
    if (livekitCubit.meetingUuid == meeting.uuid &&
        livekitCubit.state.room == null &&
        (meeting.currentParticipants?.length ?? 0) > 1 &&
        !livekitCubit.state.isCallComing) {
      livekitCubit.connect();
    }
  }
}