From 4507445407b28cfcb2b6d3743c55d7cac5aa6e5b Mon Sep 17 00:00:00 2001 From: fuenmao <980740792@qq.com> Date: Thu, 5 Dec 2024 11:24:37 +0800 Subject: [PATCH] =?UTF-8?q?1.=E6=A2=B3=E7=90=86=E5=8F=91=E8=A8=80=E6=9D=83?= =?UTF-8?q?=E9=99=90=E9=80=BB=E8=BE=91=202.=E6=A2=B3=E7=90=86=E9=BA=A6?= =?UTF-8?q?=E5=85=8B=E9=A3=8E=E5=BC=80=E9=97=AD=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../lib/pages/metting/meeting_main_logic.dart | 258 +++++++++--------- 1 file changed, 136 insertions(+), 122 deletions(-) diff --git a/wgshare/lib/pages/metting/meeting_main_logic.dart b/wgshare/lib/pages/metting/meeting_main_logic.dart index 5a63067..955f7cf 100644 --- a/wgshare/lib/pages/metting/meeting_main_logic.dart +++ b/wgshare/lib/pages/metting/meeting_main_logic.dart @@ -93,7 +93,7 @@ class MeetingMainLogic extends GetxController with RequestToolMixin{ void getMeetingRoomAllUser(List meetingRoomUsers) async { state.users.value = meetingRoomUsers; state.cacheUsers.value = meetingRoomUsers; - doHttpGetTvAnchor(); + // doHttpGetTvAnchor(); } /// 启动计时 @@ -133,22 +133,18 @@ class MeetingMainLogic extends GetxController with RequestToolMixin{ } } - /// 申请发言 - Future doHttpApplySpeak() async { - await getClient().applySpeak(state.roomNumber.value); - } - - /// 用户开闭麦 - Future doHttpSetMicr() async { - await getClient().setMicr(state.roomNumber.value, state.isOpenMicrophone.value, UserStore.to.userInfoEntity.value!.uid); - } - /// 用户开闭摄像头 Future doHttpSetCamer() async { await getClient().setCamera(state.roomNumber.value, state.isOpenCamera.value, UserStore.to.userInfoEntity.value!.uid); } - /// 结束发言 + /// --------------------------发言权限 + /// 申请发言权限 + Future doHttpApplySpeak() async { + await getClient().applySpeak(state.roomNumber.value); + } + + /// 关闭发言权限 Future doHttpCancelSpeak() async { await getClient().cancelSpeak(state.meetingRoomInfo.value!.id, state.meetingRoomInfo.value!.roomNum, UserStore.to.userInfoEntity.value!.uid); setClientRole("观众"); @@ -158,6 +154,7 @@ class MeetingMainLogic extends GetxController with RequestToolMixin{ changePageState(0); } + /// --------------------------麦克风相关(操作) /// 设置麦克风是否开启 Future setMicrophoneOpen(bool isOpen) async{ state.isOpenMicrophone.value = isOpen; @@ -167,10 +164,14 @@ class MeetingMainLogic extends GetxController with RequestToolMixin{ } } state.users.value = state.cacheUsers.value; - setEnableLocalAudio(isOpen); doHttpSetMicr(); } + /// 用户开闭麦 + Future doHttpSetMicr() async { + await getClient().setMicr(state.roomNumber.value, state.isOpenMicrophone.value, UserStore.to.userInfoEntity.value!.uid); + } + /// 设置视频是否打开 void setCameraOpen(bool isOpen){ if(isOpen == true){ @@ -262,6 +263,98 @@ class MeetingMainLogic extends GetxController with RequestToolMixin{ joinMeetingToSocket(); + /// --------------------------发言权限相关回调 + /// 开启关闭发言权限 + state.hubConnection.value?.on("ManagerRefresh", (e){ + // var jsonStr = const Utf8Decoder().convert(json.encode(e?[0]).runes.toList()); + var jsonStr = json.encode(e?[0]); + var listDynamic = jsonDecode(jsonStr); + MeetingRoomUser meetingRoomUser = MeetingRoomUser.fromJson(listDynamic); + if(meetingRoomUser.isRoomManager == true){ + debugPrint("wgs输出===:Socket-开启发言权限:${e?[0]}--${e?[1]}"); + for(MeetingRoomUser mru in state.cacheUsers.value){ + if(mru.uid == meetingRoomUser.uid){ + mru.roleId = meetingRoomUser.roleId; + mru.enableMicr = true; + mru.isRoomManager = meetingRoomUser.isRoomManager; + } + } + if(UserStore.to.userInfoEntity.value!.uid == meetingRoomUser.uid){ + state.isSpeak.value = true; + state.isOpenMicrophone.value = true; + setClientRole("主播"); + } + }else{ + debugPrint("wgs输出===:Socket-关闭发言权限:${e?[0]}--${e?[1]}"); + for(MeetingRoomUser mru in state.cacheUsers.value){ + if(mru.uid == meetingRoomUser.uid){ + mru.roleId = meetingRoomUser.roleId; + mru.enableMicr = false; + mru.isRoomManager = meetingRoomUser.isRoomManager; + } + } + if(UserStore.to.userInfoEntity.value!.uid == meetingRoomUser.uid){ + state.isSpeak.value = false; + state.isOpenMicrophone.value = false; + setClientRole("观众"); + } + } + doHttpSetMicr(); + update(); + }); + + /// --------------------------麦克风相关回调 + /// 所有用户开闭麦回调 + state.hubConnection.value?.on("OperAllMicr", (e){ + if(e?[0] == true){ + debugPrint("wgs输出===:Socket-全员开麦"); + }else{ + debugPrint("wgs输出===:Socket-全员闭麦"); + } + for(var i = 0; i < state.cacheUsers.value.length; i++){ + state.cacheUsers.value[i].enableMicr = e?[0]; + } + state.users.value = state.cacheUsers.value; + state.isOpenMicrophone.value = e?[0]; + doHttpSetMicr(); + }); + + /// 单独用户开闭麦回调 + state.hubConnection.value?.on("OperMicr", (e){ + // var jsonStr = const Utf8Decoder().convert(json.encode(e?[0]).runes.toList()); + var jsonStr = json.encode(e?[0]); + var listDynamic = jsonDecode(jsonStr); + MeetingRoomUser meetingRoomUser = MeetingRoomUser.fromJson(listDynamic); + if(meetingRoomUser.enableMicr == true){ + debugPrint("wgs输出===:Socket-用户单独开麦"); + for(MeetingRoomUser mru in state.cacheUsers.value){ + if(mru.uid == meetingRoomUser.uid){ + mru.enableMicr = true; + } + } + if(meetingRoomUser.uid == UserStore.to.userInfoEntity.value!.uid) { + state.isOpenMicrophone.value = true; + + // 恢复发布音频流 + muteLocalAudioStream(false); + } + }else{ + debugPrint("wgs输出===:Socket-用户单独闭麦"); + for(MeetingRoomUser mru in state.cacheUsers.value){ + if(mru.uid == meetingRoomUser.uid){ + mru.enableMicr = false; + } + } + if(meetingRoomUser.uid == UserStore.to.userInfoEntity.value!.uid) { + state.isOpenMicrophone.value = false; + + // 取消发布音频流 + muteLocalAudioStream(true); + } + } + }); + + /// --------------------------会议室进出相关回调 /// 远端用户或主播加入会议室回调 state.hubConnection.value?.on("UserJoined", (e){ // var jsonStr = const Utf8Decoder().convert(json.encode(user).runes.toList()); @@ -289,62 +382,6 @@ class MeetingMainLogic extends GetxController with RequestToolMixin{ debugPrint("wgs输出===:Socket-远端用户或主播离开会议室:$jsonStr"); }); - /// 申请/结束发言-管理员同意或拒绝回调 - state.hubConnection.value?.on("ManagerRefresh", (e){ - // var jsonStr = const Utf8Decoder().convert(json.encode(e?[0]).runes.toList()); - var jsonStr = json.encode(e?[0]); - var listDynamic = jsonDecode(jsonStr); - MeetingRoomUser meetingRoomUser = MeetingRoomUser.fromJson(listDynamic); - if(meetingRoomUser.isRoomManager == true){ - debugPrint("wgs输出===:Socket-申请发言:${e?[0]}--${e?[1]}"); - for(MeetingRoomUser mru in state.cacheUsers.value){ - if(mru.uid == meetingRoomUser.uid){ - mru.roleId = meetingRoomUser.roleId; - mru.enableMicr = true; - mru.isRoomManager = meetingRoomUser.isRoomManager; - } - } - if(UserStore.to.userInfoEntity.value!.uid == meetingRoomUser.uid){ - state.isSpeak.value = true; - state.isOpenMicrophone.value = true; - setClientRole("主播"); - setEnableLocalAudio(true); - doHttpSetMicr(); - } - }else{ - debugPrint("wgs输出===:Socket-停止发言:${e?[0]}--${e?[1]}"); - for(MeetingRoomUser mru in state.cacheUsers.value){ - if(mru.uid == meetingRoomUser.uid){ - mru.roleId = meetingRoomUser.roleId; - mru.enableMicr = false; - mru.isRoomManager = meetingRoomUser.isRoomManager; - } - } - if(UserStore.to.userInfoEntity.value!.uid == meetingRoomUser.uid){ - state.isSpeak.value = false; - state.isOpenMicrophone.value = false; - setClientRole("观众"); - setEnableLocalAudio(false); - doHttpSetMicr(); - } - } - update(); - }); - - /// 会议室接收消息回调 - state.hubConnection.value?.on("ReceiveMessage", (e){ - // var jsonStr = const Utf8Decoder().convert(json.encode(e).runes.toList()); - var jsonStr = json.encode(e); - List list = json.decode(jsonStr); - MeetingRoomMsg meetingRoomMsg = MeetingRoomMsg(list[0],list[1],list[2],0); - state.meetingRoomMsgs.value.add(meetingRoomMsg); - update(); - Future.delayed(const Duration(milliseconds: 100), () { - state.chatController.jumpTo(state.chatController.position.maxScrollExtent); - }); - debugPrint("wgs输出===:Socket-会议室接收消息:$jsonStr"); - }); - /// 被移除会议回调 state.hubConnection.value?.on("ForceExitRoom", (e){ // var jsonStr = const Utf8Decoder().convert(json.encode(e).runes.toList()); @@ -361,49 +398,22 @@ class MeetingMainLogic extends GetxController with RequestToolMixin{ ToastUtils.showSuccess("会议已结束"); }); - /// 所有用户开闭麦回调 - state.hubConnection.value?.on("OperAllMicr", (e){ - if(e?[0] == true){ - debugPrint("wgs输出===:Socket-全员开麦"); - }else{ - debugPrint("wgs输出===:Socket-全员闭麦"); - } - for(var i = 0; i < state.cacheUsers.value.length; i++){ - state.cacheUsers.value[i].enableMicr = e?[0]; - } - state.users.value = state.cacheUsers.value; - state.isOpenMicrophone.value = e?[0]; - }); - - /// 单独用户开闭麦回调 - state.hubConnection.value?.on("OperMicr", (e){ - // var jsonStr = const Utf8Decoder().convert(json.encode(e?[0]).runes.toList()); - var jsonStr = json.encode(e?[0]); - var listDynamic = jsonDecode(jsonStr); - MeetingRoomUser meetingRoomUser = MeetingRoomUser.fromJson(listDynamic); - if(meetingRoomUser.enableMicr == true){ - debugPrint("wgs输出===:Socket-单独用户开麦"); - for(MeetingRoomUser mru in state.cacheUsers.value){ - if(mru.uid == meetingRoomUser.uid){ - mru.enableMicr = true; - } - } - if(meetingRoomUser.uid == UserStore.to.userInfoEntity.value!.uid) { - state.isOpenMicrophone.value = true; - } - }else{ - debugPrint("wgs输出===:Socket-单独用户闭麦"); - for(MeetingRoomUser mru in state.cacheUsers.value){ - if(mru.uid == meetingRoomUser.uid){ - mru.enableMicr = false; - } - } - if(meetingRoomUser.uid == UserStore.to.userInfoEntity.value!.uid) { - state.isOpenMicrophone.value = false; - } - } + /// --------------------------会议室聊天相关回调 + /// 会议室接收消息回调 + state.hubConnection.value?.on("ReceiveMessage", (e){ + // var jsonStr = const Utf8Decoder().convert(json.encode(e).runes.toList()); + var jsonStr = json.encode(e); + List list = json.decode(jsonStr); + MeetingRoomMsg meetingRoomMsg = MeetingRoomMsg(list[0],list[1],list[2],0); + state.meetingRoomMsgs.value.add(meetingRoomMsg); + update(); + Future.delayed(const Duration(milliseconds: 100), () { + state.chatController.jumpTo(state.chatController.position.maxScrollExtent); + }); + debugPrint("wgs输出===:Socket-会议室接收消息:$jsonStr"); }); + /// --------------------------摄像头或者屏幕相关回调 /// 单独用户开闭摄像头回调 state.hubConnection.value?.on("OperCamera", (e){ // var jsonStr = const Utf8Decoder().convert(json.encode(e?[0]).runes.toList()); @@ -492,7 +502,7 @@ class MeetingMainLogic extends GetxController with RequestToolMixin{ // 打开用户音量回调 await state.rctEngine.value?.enableAudioVolumeIndication(interval: 200, smooth: 3, reportVad: true); // 启用音频模块 - setEnableLocalAudio(true); + enableAudio(); joinMeetingToRtc(); @@ -557,12 +567,12 @@ class MeetingMainLogic extends GetxController with RequestToolMixin{ for(AudioVolumeInfo avi in speakers){ for(MeetingRoomUser mru in state.cacheUsers.value){ if(avi.uid == 0){ - //debugPrint("wgs输出===:RTC-用户音量提示(自己):${CountMicrophoneVolume.getVolume(avi.volume!)}"); + debugPrint("wgs输出===:RTC-用户音量提示(自己):${CountMicrophoneVolume.getVolume(avi.volume!)}"); mru.volume = CountMicrophoneVolume.getVolume(avi.volume!); state.microphoneVolume.value = CountMicrophoneVolume.getVolume(avi.volume!); }else{ if(avi.uid.toString() == mru.uid){ - //debugPrint("wgs输出===:RTC-用户音量提示(远端用户):${speakers[0].uid}--${speakers[0].volume}"); + debugPrint("wgs输出===:RTC-用户音量提示(远端用户):${speakers[0].uid}--${speakers[0].volume}"); mru.volume = CountMicrophoneVolume.getVolume(avi.volume!); } } @@ -634,15 +644,19 @@ class MeetingMainLogic extends GetxController with RequestToolMixin{ await state.rctEngine.value?.setEnableSpeakerphone(mode == 1 ? false : true); } - /// 设置是否启用音频模块 - Future setEnableLocalAudio(bool enabled) async { - if(enabled == true){ - // 启用音频模块 - await state.rctEngine.value?.enableAudio(); - }else{ - // 关闭音频模块 - await state.rctEngine.value?.disableAudio(); - } + /// 启用音频模块 + Future enableAudio() async { + await state.rctEngine.value?.enableAudio(); + } + + /// 关闭音频模块 + Future disableAudio() async { + await state.rctEngine.value?.disableAudio(); + } + + /// 是否取消发布本地音频流 + Future muteLocalAudioStream(bool mute) async { + await state.rctEngine.value?.muteLocalAudioStream(mute); } /// 设置启用视频模块