RoomEventHandler constructor
RoomEventHandler()
Implementation
RoomEventHandler() {
super.onAllUserMicrophoneDisableChanged = (roomId, isDisable) {
_store.roomInfo.isMicrophoneDisableForAllUser = isDisable;
if (_store.currentUser.userRole.value == TUIRole.roomOwner) {
return;
}
if (isDisable) {
makeToast(msg: RoomContentsTranslations.translate('allMutePrompt'));
} else {
makeToast(msg: RoomContentsTranslations.translate('allUnMutePrompt'));
}
_store.updateItemTouchableState();
};
super.onAllUserCameraDisableChanged = (roomId, isDisable) {
_store.roomInfo.isCameraDisableForAllUser = isDisable;
if (_store.currentUser.userRole.value == TUIRole.roomOwner) {
return;
}
if (isDisable) {
makeToast(
msg: RoomContentsTranslations.translate('disableAllVideoPrompt'));
} else {
makeToast(
msg: RoomContentsTranslations.translate('enableAllVideoPrompt'));
}
_store.updateItemTouchableState();
};
super.onRemoteUserEnterRoom = (roomId, userInfo) {
_store.addUser(userInfo, _store.userInfoList);
};
super.onRemoteUserLeaveRoom = (roomId, userInfo) {
_store.removeUser(userInfo.userId, _store.userInfoList);
if (_store.roomInfo.speechMode == TUISpeechMode.speakAfterTakingSeat) {
_store.deleteInviteSeatUser(userInfo.userId);
}
};
super.onUserVideoStateChanged = (userId, streamType, hasVideo, reason) {
_store.updateUserVideoState(userId, hasVideo, reason, _store.userInfoList,
isScreenStream: streamType == TUIVideoStreamType.screenStream);
if (_store.roomInfo.speechMode == TUISpeechMode.speakAfterTakingSeat) {
_store.updateUserVideoState(
userId, hasVideo, reason, _store.seatedUserList,
isScreenStream: streamType == TUIVideoStreamType.screenStream);
}
if (streamType == TUIVideoStreamType.screenStream) {
var userModel = _store.getUserById(userId);
if (userModel != null) {
_store.screenShareUser = userModel;
_store.isSharing.value = hasVideo;
}
}
if (userId == _store.currentUser.userId.value) {
_store.updateSelfVideoState(hasVideo, reason,
isScreenStream: streamType == TUIVideoStreamType.screenStream);
}
};
super.onUserAudioStateChanged = (userId, hasAudio, reason) {
_store.updateUserAudioState(
userId, hasAudio, reason, _store.userInfoList);
if (_store.roomInfo.speechMode == TUISpeechMode.speakAfterTakingSeat) {
_store.updateUserAudioState(
userId, hasAudio, reason, _store.seatedUserList);
}
if (userId == _store.currentUser.userId.value) {
_store.updateSelfAudioState(hasAudio, reason);
}
};
super.onUserVoiceVolumeChanged = (volumeMap) {
volumeMap.forEach((userId, volume) {
bool isTalking = false;
if (volume > volumeCanHeardMinLimit) {
isTalking = true;
}
_store.updateUserTalkingState(userId, isTalking, _store.userInfoList);
if (_store.roomInfo.speechMode == TUISpeechMode.speakAfterTakingSeat) {
_store.updateUserTalkingState(
userId, isTalking, _store.seatedUserList);
}
});
};
super.onUserRoleChanged = (String userId, TUIRole role) {
if (role == TUIRole.roomOwner) {
_store.roomInfo.ownerId = userId;
}
_store.updateUserRole(userId, role, _store.userInfoList);
if (_store.roomInfo.speechMode == TUISpeechMode.speakAfterTakingSeat) {
_store.updateUserRole(userId, role, _store.seatedUserList);
}
if (userId == _store.currentUser.userId.value) {
_store.updateSelfRole(role);
}
};
super.onSendMessageForUserDisableChanged =
(String roomId, String userId, bool isDisable) {
_store.updateUserMessageState(userId, isDisable, _store.userInfoList);
};
super.onSeatListChanged = (seatList, seatedList, leftList) async {
for (var element in seatedList) {
_store.updateUserSeatedState(element.userId, true);
_store.deleteInviteSeatUser(element.userId);
var result = await RoomEngineManager()
.getRoomEngine()
.getUserInfo(element.userId);
if (result.code == TUIError.success) {
_store.addUser(result.data!, RoomStore.to.seatedUserList);
}
}
for (var element in leftList) {
_store.updateUserSeatedState(element.userId, false);
_store.removeUser(element.userId, RoomStore.to.seatedUserList);
}
};
super.onRequestReceived = (request) {
if (request.userId == RoomStore.to.currentUser.userId.value) {
TUIRoomEngine.createInstance()
.responseRemoteRequest(request.requestId, true);
}
switch (request.requestAction) {
case TUIRequestAction.requestToTakeSeat:
if (_store.roomInfo.speechMode ==
TUISpeechMode.speakAfterTakingSeat) {
var userModel = _store.getUserById(request.userId);
if (_store.inviteSeatMap[request.userId] == null &&
userModel != null) {
_store.addInviteSeatUser(userModel, request);
}
}
default:
break;
}
};
super.onRequestCancelled = (requestId, userId) {
var cancelledUserId = userId;
_store.inviteSeatMap.forEach((key, value) {
if (value == requestId) {
cancelledUserId = key;
}
});
_store.deleteInviteSeatUser(cancelledUserId);
};
super.onKickedOffSeat = (userId) {
makeToast(msg: RoomContentsTranslations.translate('kickedOffSeat'));
};
super.onKickedOutOfRoom = (roomId, reason, message) {
_store.clearStore();
};
super.onRoomDismissed = (roomId) {
_store.clearStore();
};
}