1.梳理发言权限逻辑

2.梳理麦克风开闭逻辑
This commit is contained in:
fuenmao 2024-12-05 11:24:37 +08:00
parent ded1698f63
commit 4507445407
1 changed files with 136 additions and 122 deletions

View File

@ -93,7 +93,7 @@ class MeetingMainLogic extends GetxController with RequestToolMixin{
void getMeetingRoomAllUser(List<MeetingRoomUser> meetingRoomUsers) async {
state.users.value = meetingRoomUsers;
state.cacheUsers.value = meetingRoomUsers;
doHttpGetTvAnchor();
// doHttpGetTvAnchor();
}
///
@ -133,22 +133,18 @@ class MeetingMainLogic extends GetxController with RequestToolMixin{
}
}
///
Future<void> doHttpApplySpeak() async {
await getClient().applySpeak(state.roomNumber.value);
}
///
Future<void> doHttpSetMicr() async {
await getClient().setMicr(state.roomNumber.value, state.isOpenMicrophone.value, UserStore.to.userInfoEntity.value!.uid);
}
///
Future<void> doHttpSetCamer() async {
await getClient().setCamera(state.roomNumber.value, state.isOpenCamera.value, UserStore.to.userInfoEntity.value!.uid);
}
///
/// --------------------------
///
Future<void> doHttpApplySpeak() async {
await getClient().applySpeak(state.roomNumber.value);
}
///
Future<void> 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<void> 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<void> 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<void> setEnableLocalAudio(bool enabled) async {
if(enabled == true){
//
await state.rctEngine.value?.enableAudio();
}else{
//
await state.rctEngine.value?.disableAudio();
}
///
Future<void> enableAudio() async {
await state.rctEngine.value?.enableAudio();
}
///
Future<void> disableAudio() async {
await state.rctEngine.value?.disableAudio();
}
///
Future<void> muteLocalAudioStream(bool mute) async {
await state.rctEngine.value?.muteLocalAudioStream(mute);
}
///