全员结束会议、被移除提示时间延迟

This commit is contained in:
fuenmao 2024-12-26 16:07:32 +08:00
parent fc9f72b88e
commit 85a475b19b
3 changed files with 188 additions and 156 deletions

View File

@ -54,7 +54,6 @@ class MeetingMainLogic extends GetxController with RequestToolMixin {
state.meetingToken.value = res.data!; state.meetingToken.value = res.data!;
if (isInit == true) { if (isInit == true) {
initRtc();
signalRSocket(); signalRSocket();
} }
} }
@ -64,7 +63,7 @@ class MeetingMainLogic extends GetxController with RequestToolMixin {
/// 2. /// 2.
Future<void> mergeFetch(bool isAgain) async { Future<void> mergeFetch(bool isAgain) async {
try { try {
if(isAgain == false){ if (isAgain == false) {
ToastUtils.showLoading(); ToastUtils.showLoading();
} }
@ -105,6 +104,7 @@ class MeetingMainLogic extends GetxController with RequestToolMixin {
void getMeetingRoomAllUser(List<MeetingRoomUser> meetingRoomUsers) async { void getMeetingRoomAllUser(List<MeetingRoomUser> meetingRoomUsers) async {
state.users.value = meetingRoomUsers; state.users.value = meetingRoomUsers;
state.cacheUsers.value = meetingRoomUsers; state.cacheUsers.value = meetingRoomUsers;
update();
doHttpGetTvAnchor(); doHttpGetTvAnchor();
} }
@ -328,7 +328,7 @@ class MeetingMainLogic extends GetxController with RequestToolMixin {
// //
state.hubConnection.value?.onreconnecting((error) { state.hubConnection.value?.onreconnecting((error) {
debugPrint("wgs输出===SignalR Socket-重连$error"); debugPrint("wgs输出===SignalR Socket-重连$error");
if(EasyLoading.isShow == false) { if (EasyLoading.isShow == false) {
ToastUtils.showLoadingToMask("网络故障,正在重连...", EasyLoadingMaskType.black); ToastUtils.showLoadingToMask("网络故障,正在重连...", EasyLoadingMaskType.black);
} }
}); });
@ -338,24 +338,25 @@ class MeetingMainLogic extends GetxController with RequestToolMixin {
debugPrint("wgs输出===SignalR Socket-重连成功$connectionId"); debugPrint("wgs输出===SignalR Socket-重连成功$connectionId");
joinMeetingToSocket(true); joinMeetingToSocket(true);
ToastUtils.dismiss(); ToastUtils.dismiss();
if(EasyLoading.isShow == false) { if (EasyLoading.isShow == false) {
ToastUtils.showSuccessToMask("重连成功!", EasyLoadingMaskType.black); ToastUtils.showSuccessToMask("重连成功!", EasyLoadingMaskType.black);
} }
}); });
// 5 // 5
state.hubConnection.value?.onclose((error){ state.hubConnection.value?.onclose((error) {
debugPrint("wgs输出===SignalR Socket-重连失败$error"); debugPrint("wgs输出===SignalR Socket-重连失败$error");
ToastUtils.dismiss(); ToastUtils.dismiss();
if(state.isNormaExit.value == false && state.isShowOkAlertDialog.value == false){ if (state.isNormaExit.value == false &&
state.isShowOkAlertDialog.value == false) {
showOkAlertDialog( showOkAlertDialog(
context: Get.context!, context: Get.context!,
title: "提示", title: "提示",
message: "网络错误,请重新加入会议室", message: "网络错误,请重新加入会议室",
okLabel: "确定", okLabel: "确定",
barrierDismissible: false, barrierDismissible: false,
).then((OkCancelResult value){ ).then((OkCancelResult value) {
Get.back(); Get.back();
Get.back(); Get.back();
}); });
@ -428,6 +429,7 @@ class MeetingMainLogic extends GetxController with RequestToolMixin {
debugPrint("wgs输出===Socket-关闭发言权限:观众"); debugPrint("wgs输出===Socket-关闭发言权限:观众");
} }
} }
update();
}); });
/// ------------------------------------------------------------------------------ /// ------------------------------------------------------------------------------
@ -443,6 +445,7 @@ class MeetingMainLogic extends GetxController with RequestToolMixin {
} }
state.users.value = state.cacheUsers.value; state.users.value = state.cacheUsers.value;
state.isOpenMicrophone.value = e?[0]; state.isOpenMicrophone.value = e?[0];
update();
}); });
/// ///
@ -480,6 +483,7 @@ class MeetingMainLogic extends GetxController with RequestToolMixin {
muteLocalAudioStream(true); muteLocalAudioStream(true);
} }
} }
update();
}); });
/// ------------------------------------------------------------------------------ /// ------------------------------------------------------------------------------
@ -493,6 +497,7 @@ class MeetingMainLogic extends GetxController with RequestToolMixin {
.toList(); .toList();
state.cacheUsers.value.addAll(meetingRoomUsers); state.cacheUsers.value.addAll(meetingRoomUsers);
state.users.value = state.cacheUsers.value; state.users.value = state.cacheUsers.value;
update();
debugPrint("wgs输出===Socket-远端用户或主播加入会议室:$jsonStr"); debugPrint("wgs输出===Socket-远端用户或主播加入会议室:$jsonStr");
}); });
@ -509,6 +514,7 @@ class MeetingMainLogic extends GetxController with RequestToolMixin {
} }
} }
state.users.value = state.cacheUsers.value; state.users.value = state.cacheUsers.value;
update();
doHttpGetTvAnchor(); doHttpGetTvAnchor();
debugPrint("wgs输出===Socket-远端用户或主播离开会议室:$jsonStr"); debugPrint("wgs输出===Socket-远端用户或主播离开会议室:$jsonStr");
}); });
@ -518,15 +524,21 @@ class MeetingMainLogic extends GetxController with RequestToolMixin {
// var jsonStr = const Utf8Decoder().convert(json.encode(e).runes.toList()); // var jsonStr = const Utf8Decoder().convert(json.encode(e).runes.toList());
var jsonStr = json.encode(e); var jsonStr = json.encode(e);
debugPrint("wgs输出===Socket-被移除会议:$jsonStr"); debugPrint("wgs输出===Socket-被移除会议:$jsonStr");
Get.back(); state.isNormaExit.value = true;
ToastUtils.showSuccess("你已被移除会议"); ToastUtils.showSuccess("你已被移除会议");
Future.delayed(const Duration(seconds: 1), () {
Get.back();
});
}); });
/// ///
state.hubConnection.value?.on("AllLeave", (e) { state.hubConnection.value?.on("AllLeave", (e) {
debugPrint("wgs输出===Socket-全员结束会议"); debugPrint("wgs输出===Socket-全员结束会议");
Get.back(); state.isNormaExit.value = true;
ToastUtils.showSuccess("会议已结束"); ToastUtils.showSuccess("会议已结束");
Future.delayed(const Duration(seconds: 1), () {
Get.back();
});
}); });
/// ------------------------------------------------------------------------------ /// ------------------------------------------------------------------------------
@ -607,6 +619,7 @@ class MeetingMainLogic extends GetxController with RequestToolMixin {
} }
} }
} }
update();
}); });
/// ///
@ -620,10 +633,15 @@ class MeetingMainLogic extends GetxController with RequestToolMixin {
} }
/// ///
/// isAgain
Future<void> joinMeetingToSocket(bool isAgain) async { Future<void> joinMeetingToSocket(bool isAgain) async {
await state.hubConnection.value?.invoke("joinChannel", await state.hubConnection.value?.invoke("joinChannel",
args: [state.roomNumber.value, false, false, false]); args: [state.roomNumber.value, false, false, false]);
mergeFetch(isAgain); if(isAgain == false){
initRtc(false);
}else{
mergeFetch(true);
}
} }
/// ///
@ -654,7 +672,7 @@ class MeetingMainLogic extends GetxController with RequestToolMixin {
/// ------------------------------------------------------------------------------SDK相关 /// ------------------------------------------------------------------------------SDK相关
/// SDK /// SDK
Future<void> initRtc() async { Future<void> initRtc(bool isAgain) async {
// //
PermissionService.requestPermissions(); PermissionService.requestPermissions();
@ -687,6 +705,8 @@ class MeetingMainLogic extends GetxController with RequestToolMixin {
RtcEngineEventHandler( RtcEngineEventHandler(
// //
onJoinChannelSuccess: (RtcConnection connection, int elapsed) { onJoinChannelSuccess: (RtcConnection connection, int elapsed) {
state.isJoinSuccess.value = true;
mergeFetch(isAgain);
debugPrint("wgs输出===RTC-自己加入会议室ID${connection.localUid}"); debugPrint("wgs输出===RTC-自己加入会议室ID${connection.localUid}");
}, },
@ -712,6 +732,7 @@ class MeetingMainLogic extends GetxController with RequestToolMixin {
} }
} }
} }
update();
debugPrint("wgs输出===RTC-远端用户或主播离开会议室用户或主机的ID$remoteUid"); debugPrint("wgs输出===RTC-远端用户或主播离开会议室用户或主机的ID$remoteUid");
}, },
@ -813,32 +834,37 @@ class MeetingMainLogic extends GetxController with RequestToolMixin {
// //
onConnectionStateChanged: (RtcConnection connection, onConnectionStateChanged: (RtcConnection connection,
ConnectionStateType stateType, ConnectionChangedReasonType reason) { ConnectionStateType stateType,
ConnectionChangedReasonType reason) {
debugPrint("wgs输出===RTC-网络连接状态发生改变:" debugPrint("wgs输出===RTC-网络连接状态发生改变:"
"会议室编号(${connection.channelId}" "会议室编号(${connection.channelId}"
"网络状态($stateType-${AgoraUtil.getConnectionStateChangedType(stateType)}" "网络状态($stateType-${AgoraUtil.getConnectionStateChangedType(stateType)}"
"网络改变原因($reason-${AgoraUtil.getConnectionChangedReasonType(reason)}"); "网络改变原因($reason-${AgoraUtil.getConnectionChangedReasonType(reason)}");
if(stateType == ConnectionStateType.connectionStateReconnecting){ if (stateType == ConnectionStateType.connectionStateReconnecting) {
if(EasyLoading.isShow == false){ if (EasyLoading.isShow == false) {
ToastUtils.showLoadingToMask("网络故障,正在重连...", EasyLoadingMaskType.black); ToastUtils.showLoadingToMask(
"网络故障,正在重连...", EasyLoadingMaskType.black);
} }
}else if(stateType == ConnectionStateType.connectionStateConnected && reason == ConnectionChangedReasonType.connectionChangedRejoinSuccess){ } else if (stateType == ConnectionStateType.connectionStateConnected &&
reason ==
ConnectionChangedReasonType.connectionChangedRejoinSuccess) {
ToastUtils.dismiss(); ToastUtils.dismiss();
if(EasyLoading.isShow == false){ if (EasyLoading.isShow == false) {
ToastUtils.showSuccessToMask("重连成功!", EasyLoadingMaskType.black); ToastUtils.showSuccessToMask("重连成功!", EasyLoadingMaskType.black);
} }
}else if(reason == ConnectionChangedReasonType.connectionChangedLost){ } else if (reason ==
ConnectionChangedReasonType.connectionChangedLost) {
// 15signalR Socket一致SDK继续重连 // 15signalR Socket一致SDK继续重连
Future.delayed(const Duration(milliseconds: 15000), () { Future.delayed(const Duration(milliseconds: 15000), () {
ToastUtils.dismiss(); ToastUtils.dismiss();
if(state.isShowOkAlertDialog.value == false){ if (state.isShowOkAlertDialog.value == false) {
showOkAlertDialog( showOkAlertDialog(
context: Get.context!, context: Get.context!,
title: "提示", title: "提示",
message: "网络错误,请重新加入会议室", message: "网络错误,请重新加入会议室",
okLabel: "确定", okLabel: "确定",
barrierDismissible: false, barrierDismissible: false,
).then((OkCancelResult value){ ).then((OkCancelResult value) {
Get.back(); Get.back();
Get.back(); Get.back();
}); });

View File

@ -48,7 +48,7 @@ class MeetingMainState {
late Rx<MeetingRoomInfo?> meetingRoomInfo = Rx(null); late Rx<MeetingRoomInfo?> meetingRoomInfo = Rx(null);
/// showOkAlertDialog /// showOkAlertDialog
late RxBool isShowOkAlertDialog = false.obs; late RxBool isShowOkAlertDialog = false.obs;
/// 退退 /// 退退
late RxBool isNormaExit = false.obs; late RxBool isNormaExit = false.obs;
/// ///
@ -76,6 +76,8 @@ class MeetingMainState {
late RxBool isOpenShare = false.obs; late RxBool isOpenShare = false.obs;
/// ID /// ID
late RxString remoteUid = "".obs; late RxString remoteUid = "".obs;
///
late RxBool isJoinSuccess = false.obs;
/// ///
late RxString spokesman = "".obs; late RxString spokesman = "".obs;

View File

@ -203,7 +203,7 @@ class MeetingMainPageState extends State<MeetingMainPage> {
// - // -
Visibility( Visibility(
visible: state.pageState.value == 1, visible: state.pageState.value == 1,
child: null != state.rctEngine.value child: state.isJoinSuccess.value == true && null != state.rctEngine.value && null != state.users.value && state.users.value.isNotEmpty
? Stack( ? Stack(
alignment: Alignment.center, alignment: Alignment.center,
children: [ children: [
@ -275,7 +275,9 @@ class MeetingMainPageState extends State<MeetingMainPage> {
), ),
], ],
) )
: Container()), : Container(
child: Text('加载反馈:是否成功加入会议室${state.isJoinSuccess.value}-会议室对象${state.rctEngine.value}-成员列表${state.users.value.length}-全员观看ID${state.remoteUid.value}'),
)),
Row( Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween, mainAxisAlignment: MainAxisAlignment.spaceBetween,
@ -1635,7 +1637,8 @@ class MeetingMainPageState extends State<MeetingMainPage> {
})); }));
/// gridview /// gridview
pageList.add(Container( pageList.add(GetBuilder<MeetingMainLogic>(builder: (controll){
return Container(
color: ColorUtil.Color_57_57_57, color: ColorUtil.Color_57_57_57,
child: GridView.builder( child: GridView.builder(
gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount( gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(
@ -1645,8 +1648,7 @@ class MeetingMainPageState extends State<MeetingMainPage> {
return Stack( return Stack(
children: [ children: [
state.cacheUsers.value[index].enableCamera == true state.cacheUsers.value[index].enableCamera == true
? state.cacheUsers.value[index].uid == ? state.cacheUsers.value[index].uid == UserStore.to.userInfoEntity.value!.uid
UserStore.to.userInfoEntity.value!.uid
? AgoraVideoView( ? AgoraVideoView(
controller: VideoViewController( controller: VideoViewController(
rtcEngine: state.rctEngine.value!, rtcEngine: state.rctEngine.value!,
@ -1774,7 +1776,9 @@ class MeetingMainPageState extends State<MeetingMainPage> {
], ],
); );
}), }),
)); );
}));
return pageList[position]; return pageList[position];
} }
} }