@tencentcloud/roomkit-web-vue3
Version:
<h1 align="center"> TUIRoomKit</h1> Conference (TUIRoomKit) is a product suitable for multi-person audio and video conversation scenarios such as business meetings, webinars, and online education. By integrating this product, you can add room management,
286 lines (285 loc) • 12.1 kB
JavaScript
"use strict";
var __defProp = Object.defineProperty;
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
const TUIRoomEngine = require("@tencentcloud/tuiroom-engine-js");
const environment = require("../../utils/environment.js");
const utils = require("../../utils/utils.js");
const useRoomEngine = require("../../hooks/useRoomEngine.js");
const roomService = require("../../services/roomService.js");
const uikitBaseComponentVue3 = require("@tencentcloud/uikit-base-component-vue3");
const index = require("../../locales/index.js");
const roomEngine = useRoomEngine.default();
const { t } = index.useI18n();
const _UserEventManager = class _UserEventManager {
constructor(options) {
__publicField(this, "store");
__publicField(this, "onUserVideoStateChanged", (eventInfo) => {
const { userId, streamType, hasVideo } = eventInfo;
let userInfo = this.store.userInfoObj[userId];
if (!userInfo && hasVideo) {
this.store.addUserInfo({ userId, isInRoom: true });
}
userInfo = this.store.userInfoObj[userId];
if (!userInfo) {
return;
}
const updateInfo = streamType === TUIRoomEngine.TUIVideoStreamType.kScreenStream ? { hasScreenStream: hasVideo } : { hasVideoStream: hasVideo };
this.store.updateUserInfo({ userId, ...updateInfo });
if (streamType === TUIRoomEngine.TUIVideoStreamType.kCameraStream || streamType === TUIRoomEngine.TUIVideoStreamType.kScreenStream && hasVideo) {
const streamInfo = this.store.streamInfoObj[`${userId}_${streamType}`];
if (!streamInfo) {
this.store.addStreamInfo(userId, streamType);
}
this.store.updateStreamInfo({
userId,
streamType,
hasVideoStream: hasVideo
});
} else if (streamType === TUIRoomEngine.TUIVideoStreamType.kScreenStream && !hasVideo) {
this.store.removeStreamInfo(userId, streamType);
}
});
__publicField(this, "handleUserVoiceVolumeThrottle", utils.throttle(
this.handleUserVoiceVolume,
1e3
));
if (!_UserEventManager.instance) {
_UserEventManager.instance = this;
}
this.store = options.store;
this.onRemoteUserEnterRoom = this.onRemoteUserEnterRoom.bind(this);
this.onRemoteUserLeaveRoom = this.onRemoteUserLeaveRoom.bind(this);
this.onSeatListChanged = this.onSeatListChanged.bind(this);
this.onUserVideoStateChanged = this.onUserVideoStateChanged.bind(this);
this.onUserAudioStateChanged = this.onUserAudioStateChanged.bind(this);
this.onUserVoiceVolumeChanged = this.onUserVoiceVolumeChanged.bind(this);
this.onUserInfoChanged = this.onUserInfoChanged.bind(this);
this.onSendMessageForUserDisableChanged = this.onSendMessageForUserDisableChanged.bind(this);
this.bindRoomEngineEvents();
return _UserEventManager.instance;
}
onRemoteUserEnterRoom(eventInfo) {
const { userInfo } = eventInfo;
this.store.addUserInfo(
Object.assign(userInfo, { isInRoom: true, timestamp: Date.now() })
);
if (roomService.roomService.roomStore.isFreeSpeakMode) {
this.store.addStreamInfo(
userInfo.userId,
TUIRoomEngine.TUIVideoStreamType.kCameraStream
);
}
}
onRemoteUserLeaveRoom(eventInfo) {
const { userId } = eventInfo.userInfo;
this.store.removeUserInfo(userId);
this.store.removeStreamInfo(userId, TUIRoomEngine.TUIVideoStreamType.kCameraStream);
this.store.removeStreamInfo(userId, TUIRoomEngine.TUIVideoStreamType.kScreenStream);
}
onSeatListChanged(eventInfo) {
const { seatedList, leftList } = eventInfo;
seatedList.forEach((seat) => {
const { userId } = seat;
const user = this.store.getUserInfo(userId);
if (user) {
this.store.updateUserInfo({ userId, isOnSeat: true });
} else {
this.store.addUserInfo({
userId,
isOnSeat: true,
isInRoom: true
});
}
this.store.addStreamInfo(userId, TUIRoomEngine.TUIVideoStreamType.kCameraStream);
});
leftList == null ? void 0 : leftList.forEach((seat) => {
const { userId } = seat;
const user = this.store.userInfoObj[userId];
if (user) {
this.store.updateUserInfo({ userId, isOnSeat: false });
}
this.store.removeStreamInfo(userId, TUIRoomEngine.TUIVideoStreamType.kCameraStream);
this.store.removeStreamInfo(userId, TUIRoomEngine.TUIVideoStreamType.kScreenStream);
});
}
onUserAudioStateChanged(eventInfo) {
const { userId, hasAudio } = eventInfo;
let userInfo = this.store.userInfoObj[userId];
if (!userInfo && hasAudio) {
this.store.addUserInfo({ userId, isInRoom: true });
}
userInfo = this.store.userInfoObj[userId];
if (!userInfo) {
return;
}
this.store.updateUserInfo({ userId, hasAudioStream: hasAudio });
const streamInfo = this.store.streamInfoObj[`${userId}_${TUIRoomEngine.TUIVideoStreamType.kCameraStream}`];
if (!streamInfo) {
this.store.addStreamInfo(userId, TUIRoomEngine.TUIVideoStreamType.kCameraStream);
}
this.store.updateStreamInfo({
userId,
streamType: TUIRoomEngine.TUIVideoStreamType.kCameraStream,
hasAudioStream: hasAudio
});
}
// Calculate the userId of the loudest speaker in the room
// Calculate the userId of the remote user who speaks the loudest in the current room.
handleUserVoiceVolume(userVolumeList) {
const localUserVolume = {
userId: this.store.localUserId,
volume: 0
};
const largestRemoteUserVolume = {
userId: "",
volume: 0
};
userVolumeList.forEach((item) => {
var _a, _b;
if (item.userId === this.store.localUserId && ((_a = this.store.localStream) == null ? void 0 : _a.hasAudioStream)) {
localUserVolume.volume = item.volume;
} else if (item.userId !== this.store.localUserId && ((_b = this.store.userInfoObj[item.userId]) == null ? void 0 : _b.hasAudioStream)) {
const { userId, volume } = item;
if (volume > largestRemoteUserVolume.volume) {
largestRemoteUserVolume.userId = userId;
largestRemoteUserVolume.volume = volume;
}
}
});
const largestUserVolume = localUserVolume.volume > largestRemoteUserVolume.volume ? localUserVolume : largestRemoteUserVolume;
if (roomService.roomService.roomStore.currentSpeakerInfo.remoteSpeakerUserId) {
const lastRemoteSpeakerUserVolumeInfo = userVolumeList.find(
(item) => item.userId === roomService.roomService.roomStore.currentSpeakerInfo.remoteSpeakerUserId
);
if (!lastRemoteSpeakerUserVolumeInfo || (lastRemoteSpeakerUserVolumeInfo == null ? void 0 : lastRemoteSpeakerUserVolumeInfo.volume) === 0 && largestRemoteUserVolume.volume > 0) {
roomService.roomService.roomStore.setCurrentSpeakerInfo({
remoteSpeakerUserId: largestRemoteUserVolume.userId
});
}
} else {
if (largestRemoteUserVolume.volume > 0) {
roomService.roomService.roomStore.setCurrentSpeakerInfo({
remoteSpeakerUserId: largestRemoteUserVolume.userId
});
}
}
if (roomService.roomService.roomStore.currentSpeakerInfo.speakerUserId) {
const lastSpeakerUserVolumeInfo = userVolumeList.find(
(item) => item.userId === roomService.roomService.roomStore.currentSpeakerInfo.speakerUserId
);
if (!lastSpeakerUserVolumeInfo || lastSpeakerUserVolumeInfo.volume === 0 && largestUserVolume.volume > 0) {
roomService.roomService.roomStore.setCurrentSpeakerInfo({
speakerUserId: largestUserVolume.userId
});
}
} else {
if (largestUserVolume.volume > 0) {
roomService.roomService.roomStore.setCurrentSpeakerInfo({
speakerUserId: largestUserVolume.userId
});
}
}
}
onUserVoiceVolumeChanged(eventInfo) {
const { userVolumeList } = eventInfo;
roomService.roomService.roomStore.setAudioVolume(userVolumeList);
if (environment.isMobile) {
this.handleUserVoiceVolumeThrottle(userVolumeList);
}
}
onUserInfoChanged(eventInfo) {
const { userId, nameCard, roomCustomInfo, userRole } = eventInfo.userInfo;
this.store.updateUserInfo({ userId, nameCard, roomCustomInfo, userRole });
}
onSendMessageForUserDisableChanged(eventInfo) {
const { userId, isDisable } = eventInfo;
if (userId === this.store.localUser.userId) {
uikitBaseComponentVue3.TUIToast({
type: uikitBaseComponentVue3.TOAST_TYPE.WARNING,
message: isDisable ? t("You have been banned from text chat") : t("You are allowed to text chat")
});
roomService.roomService.chatStore.setSendMessageDisableChanged(isDisable);
}
this.store.updateUserInfo({
userId,
isMessageDisabled: isDisable
});
}
bindRoomEngineEvents() {
TUIRoomEngine.once("ready", () => {
var _a, _b, _c, _d, _e, _f, _g, _h;
(_a = roomEngine.instance) == null ? void 0 : _a.on(
TUIRoomEngine.TUIRoomEvents.onRemoteUserEnterRoom,
this.onRemoteUserEnterRoom
);
(_b = roomEngine.instance) == null ? void 0 : _b.on(
TUIRoomEngine.TUIRoomEvents.onRemoteUserLeaveRoom,
this.onRemoteUserLeaveRoom
);
(_c = roomEngine.instance) == null ? void 0 : _c.on(
TUIRoomEngine.TUIRoomEvents.onSeatListChanged,
this.onSeatListChanged
);
(_d = roomEngine.instance) == null ? void 0 : _d.on(
TUIRoomEngine.TUIRoomEvents.onUserVideoStateChanged,
this.onUserVideoStateChanged
);
(_e = roomEngine.instance) == null ? void 0 : _e.on(
TUIRoomEngine.TUIRoomEvents.onUserAudioStateChanged,
this.onUserAudioStateChanged
);
(_f = roomEngine.instance) == null ? void 0 : _f.on(
TUIRoomEngine.TUIRoomEvents.onUserVoiceVolumeChanged,
this.onUserVoiceVolumeChanged
);
(_g = roomEngine.instance) == null ? void 0 : _g.on(
TUIRoomEngine.TUIRoomEvents.onUserInfoChanged,
this.onUserInfoChanged
);
(_h = roomEngine.instance) == null ? void 0 : _h.on(
TUIRoomEngine.TUIRoomEvents.onSendMessageForUserDisableChanged,
this.onSendMessageForUserDisableChanged
);
});
}
unbindRoomEngineEvents() {
var _a, _b, _c, _d, _e, _f, _g, _h;
(_a = roomEngine.instance) == null ? void 0 : _a.off(
TUIRoomEngine.TUIRoomEvents.onRemoteUserEnterRoom,
this.onRemoteUserEnterRoom
);
(_b = roomEngine.instance) == null ? void 0 : _b.off(
TUIRoomEngine.TUIRoomEvents.onRemoteUserLeaveRoom,
this.onRemoteUserLeaveRoom
);
(_c = roomEngine.instance) == null ? void 0 : _c.off(
TUIRoomEngine.TUIRoomEvents.onSeatListChanged,
this.onSeatListChanged
);
(_d = roomEngine.instance) == null ? void 0 : _d.off(
TUIRoomEngine.TUIRoomEvents.onUserVideoStateChanged,
this.onUserVideoStateChanged
);
(_e = roomEngine.instance) == null ? void 0 : _e.off(
TUIRoomEngine.TUIRoomEvents.onUserAudioStateChanged,
this.onUserAudioStateChanged
);
(_f = roomEngine.instance) == null ? void 0 : _f.off(
TUIRoomEngine.TUIRoomEvents.onUserVoiceVolumeChanged,
this.onUserVoiceVolumeChanged
);
(_g = roomEngine.instance) == null ? void 0 : _g.off(
TUIRoomEngine.TUIRoomEvents.onUserInfoChanged,
this.onUserInfoChanged
);
(_h = roomEngine.instance) == null ? void 0 : _h.off(
TUIRoomEngine.TUIRoomEvents.onSendMessageForUserDisableChanged,
this.onSendMessageForUserDisableChanged
);
}
};
__publicField(_UserEventManager, "instance");
let UserEventManager = _UserEventManager;
exports.default = UserEventManager;