onHandleNewLivekitCall function
dynamic
onHandleNewLivekitCall(
- dynamic value,
- 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();
}
}
}