From f2a9eab198cb682e54d162a27a48b3d53fc67a24 Mon Sep 17 00:00:00 2001 From: crimx Date: Fri, 23 Apr 2021 18:21:13 +0800 Subject: [PATCH] fix(classroom): fix user join room race condition --- desktop/renderer-app/src/stores/ClassRoomStore.ts | 14 +++++++++----- desktop/renderer-app/src/stores/UserStore.ts | 12 ++++++++++++ 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/desktop/renderer-app/src/stores/ClassRoomStore.ts b/desktop/renderer-app/src/stores/ClassRoomStore.ts index 5d01eb5888e..e11fdfbe7ee 100644 --- a/desktop/renderer-app/src/stores/ClassRoomStore.ts +++ b/desktop/renderer-app/src/stores/ClassRoomStore.ts @@ -471,10 +471,11 @@ export class ClassRoomStore { await this.whiteboardStore.joinWhiteboardRoom(); - channel.on("MemberJoined", userUUID => { - // not use errorTips function (because there is no need) - this.users.addUser(userUUID).catch(console.warn); - }); + // add user on RequestChannelStatus + // channel.on("MemberJoined", userUUID => { + // // not use errorTips function (because there is no need) + // this.users.addUser(userUUID).catch(console.warn); + // }); channel.on("MemberLeft", this.users.removeUser); this.onRTCEvents(); @@ -723,8 +724,10 @@ export class ClassRoomStore { } }); - this.rtm.on(RTMessageType.RequestChannelStatus, (status, senderId) => { + this.rtm.on(RTMessageType.RequestChannelStatus, async (status, senderId) => { if (status.roomUUID === this.roomUUID) { + // not use errorTips function (because there is no need) + await this.users.addUser(senderId).catch(console.warn); this.users.updateUsers(user => { if (user.userUUID === senderId) { if (this.users.creator && user.userUUID === this.users.creator.userUUID) { @@ -733,6 +736,7 @@ export class ClassRoomStore { } user.camera = status.user.camera; user.mic = status.user.mic; + return false; } return true; diff --git a/desktop/renderer-app/src/stores/UserStore.ts b/desktop/renderer-app/src/stores/UserStore.ts index 6199a83ccba..05061772f4e 100644 --- a/desktop/renderer-app/src/stores/UserStore.ts +++ b/desktop/renderer-app/src/stores/UserStore.ts @@ -182,8 +182,20 @@ export class UserStore { if (user.userUUID === this.ownerUUID) { this.creator = user; } else if (user.isSpeak) { + const index = this.speakingJoiners.findIndex( + ({ userUUID }) => userUUID === user.userUUID, + ); + if (index >= 0) { + this.speakingJoiners.splice(index, 1); + } this.speakingJoiners.push(user); } else if (user.isRaiseHand) { + const index = this.handRaisingJoiners.findIndex( + ({ userUUID }) => userUUID === user.userUUID, + ); + if (index >= 0) { + this.handRaisingJoiners.splice(index, 1); + } this.handRaisingJoiners.push(user); } else { this.otherJoiners.push(user);