fix: 尝试修复 同个人上多个麦位的异常问题

This commit is contained in:
eggmanQQQ
2025-02-26 18:14:06 +08:00
parent bb31162bb9
commit 9f6f785dbb
3 changed files with 41 additions and 17 deletions

View File

@@ -648,14 +648,28 @@ public final class AvRoomDataManager {
int size = mMicQueueMemberMap.size();
for (int i = 0; i < size; i++) {
RoomQueueInfo roomQueueInfo = mMicQueueMemberMap.valueAt(i);
if (roomQueueInfo != null && roomQueueInfo.mChatRoomMember != null
&& Objects.equals(roomQueueInfo.mChatRoomMember.getAccount(), myUid)) {
if (roomQueueInfo != null && roomQueueInfo.mChatRoomMember != null && Objects.equals(roomQueueInfo.mChatRoomMember.getAccount(), myUid)) {
return true;
}
}
return false;
}
/**
* 排查有无同个人在 多个麦位上
*/
public int isOnMicNum(String myUid) {
int num = 0;
int size = mMicQueueMemberMap.size();
for (int i = 0; i < size; i++) {
RoomQueueInfo roomQueueInfo = mMicQueueMemberMap.valueAt(i);
if (roomQueueInfo != null && roomQueueInfo.mChatRoomMember != null && Objects.equals(roomQueueInfo.mChatRoomMember.getAccount(), myUid)) {
num++;
}
}
return num;
}
/**
* 判断自己是否在麦上
*
@@ -678,8 +692,7 @@ public final class AvRoomDataManager {
int size = mMicQueueMemberMap.size();
for (int i = 0; i < size; i++) {
RoomQueueInfo roomQueueInfo = mMicQueueMemberMap.valueAt(i);
if (roomQueueInfo != null && roomQueueInfo.mChatRoomMember != null
&& Objects.equals(roomQueueInfo.mChatRoomMember.getAccount(), String.valueOf(currentUid))) {
if (roomQueueInfo != null && roomQueueInfo.mChatRoomMember != null && Objects.equals(roomQueueInfo.mChatRoomMember.getAccount(), String.valueOf(currentUid))) {
return mMicQueueMemberMap.keyAt(i);
}
}

View File

@@ -406,19 +406,28 @@ public class RoomBaseModel extends BaseModel implements IRoomBaseModel {
}
};
//tofix 在这里遍历一遍, 有可能在两个麦位上的情况,要下麦两次
//先看下这个用户是否在麦上
if (AvRoomDataManager.get().isOnMic(userInfo.getUid())) {int position = AvRoomDataManager.get().getMicPosition(userInfo.getUid());
//下麦
downMicroPhone(position, new CallBack<String>() {
@Override
public void onSuccess(String data) {
updateQueueEx(micPosition, roomId, callBackTmp, userInfo);
}
public void onFail(int code, String error) {
callBackTmp.onFail(-1, ResUtil.getString(R.string.room_model_roombasemodel_03));
}
});
int onMicNum = AvRoomDataManager.get().isOnMicNum(String.valueOf(userInfo.getUid()));
OtherExtKt.doLog("上麦 上麦前的检查下麦 , 需要下麦的计数是 = "+onMicNum);
MyUtil.INSTANCE.setDownMicNum(0);
if (onMicNum > 0) {
for (int i = 0; i < onMicNum; i++) {
int position = AvRoomDataManager.get().getMicPosition(userInfo.getUid());
//下麦
downMicroPhone(position, new CallBack<String>() {
@Override
public void onSuccess(String data) {
MyUtil.INSTANCE.setDownMicNum(MyUtil.INSTANCE.getDownMicNum()+1);
if (MyUtil.INSTANCE.getDownMicNum() == onMicNum) {
updateQueueEx(micPosition, roomId, callBackTmp, userInfo);
}
}
public void onFail(int code, String error) {
callBackTmp.onFail(-1, ResUtil.getString(R.string.room_model_roombasemodel_03));
}
});
}
} else {
updateQueueEx(micPosition, roomId, callBackTmp, userInfo);
}
@@ -432,7 +441,7 @@ public class RoomBaseModel extends BaseModel implements IRoomBaseModel {
.subscribe();
}
/**
/** //tofix 双麦位问题 , chatRoomQueueChangeNotice 云信上麦回调前走了这里,导致出现双麦位
* 处理网易云信坑位信息
* 这里只有在这个坑位原来没人但是云信队列信息有人,才更新这个坑位,防止挤麦
*/
@@ -718,6 +727,7 @@ public class RoomBaseModel extends BaseModel implements IRoomBaseModel {
.setCallback(new RequestCallback<List<Entry<String, String>>>() {
@Override
public void onSuccess(List<Entry<String, String>> param) {
e.onNext(param);
e.onComplete();
}

View File

@@ -7,6 +7,7 @@ object MyUtil {
var CLICK_TIME = 0L
var CLICK_DIFF_TIME = 2000L
var upMicIng = false
var downMicNum = 0 //需要下麦的 计数
fun initAppWidth(view: View?) {