@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,
411 lines (410 loc) • 15.3 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.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
const TUIRoomEngine = require("@tencentcloud/tuiroom-engine-js");
const types = require("../types.js");
const environment = require("../../utils/environment.js");
const index = require("../../utils/common/logger/index.js");
require("vue");
require("../../components/common/base/IconButton.vue2.js");
;/* empty css */
require("@tencentcloud/uikit-base-component-vue3");
require("../../stores/room.js");
require("pinia");
;/* empty css */
require("../../hooks/useZIndex.js");
require("../main.js");
require("../roomService.js");
require("../../locales/index.js");
require("mitt");
require("@tencentcloud/tui-core");
;/* empty css */
;/* empty css */
;/* empty css */
;/* empty css */
;/* empty css */
const index$2 = require("../../core/hooks/useAudioDeviceState/index.js");
;/* empty css */
;/* empty css */
;/* empty css */
require("../../stores/basic.js");
;/* empty css */
;/* empty css */
;/* empty css */
require("../../hooks/useRoomEngine.js");
const index$1 = require("../../core/hooks/useVideoDeviceState/index.js");
;/* empty css */
;/* empty css */
require("../../core/hooks/useUserState/useUserActions/useAudioAction.js");
require("../../core/hooks/useUserState/useUserActions/useChatAction.js");
require("../../core/hooks/useUserState/useUserActions/useVideoAction.js");
require("../../core/hooks/useUserState/useUserActions/useTransferOwnerAction.js");
require("../../core/hooks/useUserState/useUserActions/useChangeNameCardAction/index.js");
require("../../core/hooks/useUserState/useUserActions/useKickUserAction.js");
require("../../core/hooks/useUserState/useUserActions/useSeatAction.js");
require("../../core/hooks/useUserState/useUserActions/useAdminAction.js");
require("../../core/store/room.js");
require("../../core/manager/userEventManger.js");
;/* empty css */
require("../../core/hooks/useFreeBeautyState/index.js");
;/* empty css */
;/* empty css */
;/* empty css */
;/* empty css */
;/* empty css */
;/* empty css */
;/* empty css */
;/* empty css */
require("../../core/hooks/useUserState/useUserActions/useMemberInviteAction.js");
;/* empty css */
;/* empty css */
;/* empty css */
;/* empty css */
;/* empty css */
;/* empty css */
;/* empty css */
;/* empty css */
;/* empty css */
;/* empty css */
;/* empty css */
;/* empty css */
;/* empty css */
const { microphone, speaker } = index$2.useAudioDeviceState();
const { camera } = index$1.useVideoDeviceState();
const logPrefix = "[RoomService:roomActionManager]";
const smallParam = new TUIRoomEngine.TRTCVideoEncParam();
smallParam.videoResolution = TUIRoomEngine.TRTCVideoResolution.TRTCVideoResolution_640_360;
smallParam.videoFps = 10;
smallParam.videoBitrate = 550;
class RoomActionManager {
constructor(service) {
__publicField(this, "service");
this.service = service;
}
async start(roomId, params = {}) {
const {
roomName,
isSeatEnabled = false,
isOpenCamera = false,
isOpenMicrophone = false,
defaultCameraId,
defaultMicrophoneId,
defaultSpeakerId,
password
} = params;
const roomMode = isSeatEnabled ? "SpeakAfterTakingSeat" : "FreeToSpeak";
this.service.roomStore.resetRoomData();
await this.createRoom({
roomId,
roomName,
roomMode,
roomParam: {
isOpenCamera,
isOpenMicrophone,
defaultCameraId,
defaultMicrophoneId,
defaultSpeakerId,
password
}
});
await this.enterRoom({
roomId,
roomParam: {
isOpenCamera,
isOpenMicrophone,
defaultCameraId,
defaultMicrophoneId,
defaultSpeakerId,
password
}
});
this.service.emit(types.EventType.ROOM_START, { roomId });
}
async join(roomId, params = {}) {
const {
isOpenCamera = false,
isOpenMicrophone = false,
defaultCameraId,
defaultMicrophoneId,
defaultSpeakerId,
password
} = params;
this.service.roomStore.resetRoomData();
await this.enterRoom({
roomId,
roomParam: {
isOpenCamera,
isOpenMicrophone,
defaultCameraId,
defaultMicrophoneId,
defaultSpeakerId,
password
}
});
this.service.emit(types.EventType.ROOM_JOIN, { roomId });
}
async leaveRoom() {
var _a;
try {
this.closeMediaBeforeLeave();
const response = await ((_a = this.service.roomEngine.instance) == null ? void 0 : _a.exitRoom());
this.service.resetStore();
index.default.log(`${logPrefix}leaveRoom:`, response);
this.service.emit(types.EventType.ROOM_LEAVE, response);
} catch (error) {
index.default.error(`${logPrefix}leaveRoom error:`, error);
}
}
async dismissRoom() {
var _a;
try {
index.default.log(`${logPrefix}dismissRoom: enter`);
this.closeMediaBeforeLeave();
await ((_a = this.service.roomEngine.instance) == null ? void 0 : _a.destroyRoom());
this.service.resetStore();
this.service.emit(types.EventType.ROOM_DISMISS, {});
} catch (error) {
index.default.error(`${logPrefix}dismissRoom error:`, error);
}
}
async createRoom(options) {
try {
const { roomId, roomName, roomMode, roomParam } = options;
const roomParams = {
roomId,
roomName,
roomType: TUIRoomEngine.TUIRoomType.kConference,
isSeatEnabled: roomMode !== "FreeToSpeak",
seatMode: roomMode === "SpeakAfterTakingSeat" ? TUIRoomEngine.TUISeatMode.kApplyToTake : void 0,
password: (roomParam == null ? void 0 : roomParam.password) || ""
};
await this.handleRoomCreation(roomParams, options);
} catch (error) {
index.default.error(`${logPrefix}createRoom error:`, error);
this.service.errorHandler.handleError(error, "createRoom");
throw error;
}
}
async handleRoomCreation(roomParams, options) {
var _a;
const { roomEngine } = this.service;
if (!roomEngine.instance) {
return;
}
this.service.basicStore.setRoomId(roomParams.roomId);
index.default.debug(`${logPrefix}createRoom:`, roomParams, options);
await ((_a = roomEngine.instance) == null ? void 0 : _a.createRoom(roomParams));
}
async enterRoom(options) {
var _a;
try {
const { roomId, roomParam } = options;
const roomInfo = await this.doEnterRoom({
roomId,
roomType: TUIRoomEngine.TUIRoomType.kConference,
password: (roomParam == null ? void 0 : roomParam.password) || ""
});
this.service.roomStore.setRoomInfo(roomInfo);
await this.getUserList();
await this.syncUserInfo(this.service.basicStore.userId);
await this.fetchAttendeeList(roomId);
await this.getInvitationList(roomId);
if (roomInfo.isSeatEnabled) {
await this.getSeatList();
if (this.service.roomStore.isMaster) {
await ((_a = this.service.roomEngine.instance) == null ? void 0 : _a.takeSeat({
seatIndex: -1,
timeout: 0
}));
this.service.roomStore.updateUserInfo({
userId: this.service.basicStore.userId,
onSeat: true
});
}
}
this.setRoomParams(roomParam);
} catch (error) {
index.default.error(`${logPrefix}enterRoom error:`, error);
this.service.errorHandler.handleError(error, "enterRoom");
throw error;
}
}
async setRoomParams(roomParam) {
if (!roomParam) {
return;
}
const {
isOpenCamera,
isOpenMicrophone,
defaultCameraId,
defaultMicrophoneId,
defaultSpeakerId
} = roomParam;
if (defaultCameraId) {
camera.setCurrentDevice({ deviceId: defaultCameraId });
}
if (defaultMicrophoneId) {
microphone.setCurrentDevice({ deviceId: defaultMicrophoneId });
}
if (defaultSpeakerId) {
speaker.setCurrentDevice({ deviceId: defaultSpeakerId });
}
const {
isMaster,
isMicrophoneDisableForAllUser,
isCameraDisableForAllUser,
isFreeSpeakMode
} = this.service.roomStore;
const isCanOpenMicrophone = isMaster || !isMicrophoneDisableForAllUser && isFreeSpeakMode;
if (isCanOpenMicrophone) {
if (isOpenMicrophone) {
await microphone.openLocalMicrophone();
await microphone.unmuteLocalAudio();
} else {
await microphone.muteLocalAudio();
}
}
const isCanOpenCamera = isMaster || !isCameraDisableForAllUser && isFreeSpeakMode;
if (isCanOpenCamera && isOpenCamera) {
camera.openLocalCamera();
}
}
async doEnterRoom(params) {
var _a, _b;
const { roomEngine } = this.service;
const { roomId, roomType, password } = params;
this.service.basicStore.setRoomId(roomId);
const isH5 = environment.isMobile && !environment.isWeChat;
const trtcCloud = (_a = roomEngine.instance) == null ? void 0 : _a.getTRTCCloud();
trtcCloud == null ? void 0 : trtcCloud.setDefaultStreamRecvMode(true, false);
const roomInfo = await ((_b = roomEngine.instance) == null ? void 0 : _b.enterRoom({
roomId,
roomType,
options: {
password
}
}));
trtcCloud == null ? void 0 : trtcCloud.enableSmallVideoStream(!isH5, smallParam);
microphone.muteLocalAudio();
if (!roomInfo.isSeatEnabled) {
microphone.openLocalMicrophone();
}
return roomInfo;
}
async getUserList() {
var _a;
const { roomEngine } = this.service;
let nextSequence = 0;
try {
do {
const result = await ((_a = roomEngine.instance) == null ? void 0 : _a.getUserList({
nextSequence
}));
result.userInfoList.forEach((user) => {
this.service.roomStore.addUserInfo(
Object.assign(user, { isInRoom: true })
);
if (this.service.roomStore.isFreeSpeakMode) {
this.service.roomStore.addStreamInfo(
user.userId,
TUIRoomEngine.TUIVideoStreamType.kCameraStream
);
}
});
nextSequence = result.nextSequence;
} while (nextSequence !== 0);
} catch (error) {
index.default.error("TUIRoomEngine.getUserList", error.code, error.message);
}
}
async getInvitationList(roomId, cursor = "", result = []) {
const res = await this.service.conferenceInvitationManager.getInvitationList({
roomId,
cursor,
count: 20
});
if (!(res == null ? void 0 : res.invitationList)) return [];
result.push(...res == null ? void 0 : res.invitationList);
if (res.cursor !== "") {
await this.getInvitationList(roomId, res.cursor, result);
}
const list = result.map(({ invitee, status }) => ({
...invitee,
status
}));
this.service.roomStore.updateInviteeList(list);
}
async fetchAttendeeList(roomId, cursor = "", result = []) {
const res = await this.service.scheduleConferenceManager.fetchAttendeeList({
roomId,
cursor,
count: 20
});
if (!(res == null ? void 0 : res.attendeeList)) return [];
result.push(...res == null ? void 0 : res.attendeeList);
if (res.cursor !== "") {
await this.fetchAttendeeList(roomId, res.cursor, result);
}
const inviteeList = result.filter((user) => {
return !this.service.roomStore.userList.some(
(item) => item.userId === user.userId
);
});
this.service.roomStore.updateInviteeList(inviteeList);
}
async syncUserInfo(userId) {
var _a;
const { roomEngine } = this.service;
const userInfo = await ((_a = roomEngine.instance) == null ? void 0 : _a.getUserInfo({
userId
}));
const { isMessageDisabled } = userInfo;
this.service.chatStore.setSendMessageDisableChanged(isMessageDisabled);
}
async getSeatList() {
var _a;
const { roomEngine } = this.service;
try {
const seatList = await ((_a = roomEngine.instance) == null ? void 0 : _a.getSeatList());
seatList.forEach((seat) => {
const { userId } = seat;
if (!userId) {
return;
}
const user = this.service.roomStore.userInfoObj[userId];
if (user) {
this.service.roomStore.updateUserInfo({ userId, onSeat: true });
} else {
this.service.roomStore.addUserInfo({
userId,
onSeat: true,
isInRoom: true
});
}
this.service.roomStore.addStreamInfo(
userId,
TUIRoomEngine.TUIVideoStreamType.kCameraStream
);
});
} catch (error) {
index.default.error("TUIRoomEngine.getSeatList", error.code, error.message);
}
}
closeMediaBeforeLeave() {
var _a, _b;
const { roomEngine } = this.service;
if (this.service.roomStore.localUser.hasAudioStream) {
(_a = roomEngine.instance) == null ? void 0 : _a.closeLocalMicrophone();
}
if (this.service.roomStore.localUser.hasVideoStream) {
(_b = roomEngine.instance) == null ? void 0 : _b.closeLocalCamera();
}
}
async fetchRoomInfo(options) {
var _a;
return await ((_a = this.service.roomEngine.instance) == null ? void 0 : _a.fetchRoomInfo(options));
}
}
exports.RoomActionManager = RoomActionManager;