@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,
228 lines (184 loc) • 6.07 kB
text/typescript
import { ChatSDK } from '@tencentcloud/chat';
import {
roomService,
StartParams,
JoinParams,
LanguageOption,
Theme,
EventType,
MetricsKey,
} from './services';
import { TUIRoomEngine } from './index';
import logger from './utils/common/logger';
import { toTargetTheme } from './utils/common';
import { StreamInfo, UserInfo } from './stores/room';
import { Comparator } from './utils/utils';
export enum RoomEvent {
ROOM_START = 'RoomStart',
ROOM_JOIN = 'RoomJoin',
ROOM_LEAVE = 'RoomLeave',
ROOM_DISMISS = 'RoomDestroy',
ROOM_ERROR = 'RoomError',
KICKED_OUT = 'KickedOut',
KICKED_OFFLINE = 'KickedOffline',
USER_SIG_EXPIRED = 'UserSigExpired',
USER_LOGOUT = 'UserLogout',
LANGUAGE_CHANGED = 'LanguageChanged',
THEME_CHANGED = 'ThemeChanged',
CONFERENCE_INVITATION_ACCEPTED = 'ConferenceInvitationAccepted',
}
export enum FeatureButton {
SwitchTheme = 'SwitchTheme',
SwitchLayout = 'LayoutControl',
SwitchLanguage = 'Language',
FullScreen = 'FullScreen',
Invitation = 'InviteControl',
BasicBeauty = 'BasicBeauty',
}
export type ThemeOption = 'LIGHT' | 'DARK';
interface IConference {
getRoomEngine(): TUIRoomEngine | null;
on: (
eventType: RoomEvent,
callback: (data?: LanguageOption | ThemeOption | any) => void
) => void;
off: (
eventType: RoomEvent,
callback: (data?: LanguageOption | ThemeOption | any) => void
) => void;
login: (params: {
sdkAppId: number;
userId: string;
userSig: string;
tim?: ChatSDK;
}) => Promise<void>;
logout: () => Promise<void>;
start: (roomId: string, params: StartParams) => Promise<void>;
join: (roomId: string, params: JoinParams) => Promise<void>;
leave: () => Promise<void>;
dismiss: () => Promise<void>;
setSelfInfo: (options: {
userName: string;
avatarUrl: string;
}) => Promise<void>;
setLanguage: (language: LanguageOption) => void;
setTheme: (theme: ThemeOption) => void;
disableTextMessaging: () => void;
disableScreenSharing: () => void;
enableWatermark: () => void;
enableVirtualBackground: () => void;
hideFeatureButton: (name: FeatureButton) => void;
replaceFriendList: (userList: Array<any>) => void;
setUserListSortComparator: (comparator: Comparator<UserInfo>) => void;
setStreamListSortComparator: (comparator: Comparator<StreamInfo>) => void;
setParticipants: (
participants: Array<{
userName: string;
userId: string;
avatarUrl: string;
}>
) => void;
}
class Conference implements IConference {
public login(params: {
sdkAppId: number;
userId: string;
userSig: string;
tim?: ChatSDK;
}) {
return roomService.initRoomKit(params);
}
public async logout() {
return roomService.logOut();
}
public getRoomEngine() {
const roomEngine = roomService.roomEngine.instance;
if (!roomEngine) {
logger.warn('getRoomEngine failed, roomEngine is not exist');
}
return roomService.roomEngine.instance;
}
public on(
eventType: RoomEvent,
callback: (data?: LanguageOption | ThemeOption | any) => void
) {
roomService.on(eventType as unknown as EventType, callback);
}
public off(
eventType: RoomEvent,
callback: (data?: LanguageOption | ThemeOption | any) => void
) {
roomService.off(eventType as unknown as EventType, callback);
}
public async start(roomId: string, params?: StartParams) {
return await roomService.start(roomId, params);
}
public async join(roomId: string, params?: JoinParams) {
return await roomService.join(roomId, params);
}
public async leave() {
return await roomService.leaveRoom();
}
public async dismiss() {
return await roomService.dismissRoom();
}
public setSelfInfo(options: { userName: string; avatarUrl: string }) {
return roomService.setSelfInfo(options);
}
public setLanguage(language: LanguageOption) {
roomService.dataReportManager.reportCount(MetricsKey.setLanguage);
return roomService.setLanguage(language);
}
public setTheme(theme: ThemeOption) {
roomService.dataReportManager.reportCount(MetricsKey.setTheme);
return roomService.setTheme(toTargetTheme(theme) as Theme);
}
public disableTextMessaging() {
roomService.dataReportManager.reportCount(MetricsKey.disableTextMessaging);
roomService.setComponentConfig({ ChatControl: { visible: false } });
}
public disableScreenSharing() {
roomService.dataReportManager.reportCount(MetricsKey.disableScreenSharing);
roomService.setComponentConfig({ ScreenShare: { visible: false } });
}
public enableWatermark() {
roomService.dataReportManager.reportCount(MetricsKey.enableWatermark);
roomService.waterMark.toggleWatermark(true);
}
public enableVirtualBackground() {
roomService.dataReportManager.reportCount(
MetricsKey.enableVirtualBackground
);
roomService.setComponentConfig({ VirtualBackground: { visible: true } });
}
public hideFeatureButton(name: FeatureButton) {
roomService.dataReportManager.reportCount(MetricsKey.hideFeatureButton);
roomService.setComponentConfig({ [name]: { visible: false } });
}
public replaceFriendList(userList: Array<any>) {
return roomService.scheduleConferenceManager.replaceFriendList(userList);
}
public setUserListSortComparator(comparator: Comparator<UserInfo>) {
roomService.userManager.setUserListSortComparator(comparator);
}
public setStreamListSortComparator(comparator: Comparator<StreamInfo>) {
roomService.userManager.setStreamListSortComparator(comparator);
}
public setParticipants(
participants: Array<{
userName: string;
userId: string;
avatarUrl: string;
}>
) {
const list = participants.map(item => {
const { userId, userName, avatarUrl } = item;
return {
userID: userId,
profile: { userID: userId, nick: userName, avatar: avatarUrl },
};
});
roomService.scheduleConferenceManager.replaceFriendList(list);
}
}
export const conference = new Conference();