需要添加直播接口

This commit is contained in:
cbb
2026-01-12 17:52:15 +08:00
parent 83fec2617c
commit 13af9eb303
281 changed files with 313157 additions and 104 deletions

View File

@@ -0,0 +1,204 @@
/**
* @module LiveAudienceState
* @module_description
* 直播间观众状态管理模块
* 核心功能:管理直播间观众列表,提供观众权限控制、管理员设置等直播间秩序维护功能。
* 技术特点:支持实时观众列表更新、权限分级管理、批量操作等高级功能,确保直播间秩序和用户体验。
* 业务价值:为直播平台提供完整的观众管理解决方案,支持大规模观众场景下的秩序维护。
* 应用场景:观众管理、权限控制、直播间秩序维护、观众互动管理等核心业务场景。
*/
import { ref } from "vue";
import {
FetchAudienceListOptions, SetAdministratorOptions, RevokeAdministratorOptions, KickUserOutOfRoomOptions,
DisableSendMessageOptions, LiveUserInfoParam, ILiveListener
} from "@/uni_modules/tuikit-atomic-x";
import { getRTCRoomEngineManager } from "./rtcRoomEngine";
import { callUTSFunction, safeJsonParse } from "../utils/utsUtils";
/**
* 直播间观众列表
* @type {Ref<LiveUserInfoParam[]>}
* @memberof module:LiveAudienceState
* @example
* import { useLiveAudienceState } from '@/uni_modules/tuikit-atomic-x/state/LiveAudienceState';
* const { audienceList } = useLiveAudienceState('your_live_id');
*
* // 监听观众列表变化
* watch(audienceList, (newAudienceList) => {
* if (newAudienceList && newAudienceList.length > 0) {
* console.log('观众列表更新:', newAudienceList);
* newAudienceList.forEach(audience => {
* console.log('观众ID:', audience.userID);
* });
* }
* });
*
* // 获取当前观众列表
* const audiences = audienceList.value;
* console.log('当前观众数:', audiences.length);
*/
const audienceList = ref<LiveUserInfoParam[]>([]);
/**
* 直播间观众数量
* @type {Ref<number>}
* @memberof module:LiveAudienceState
* @example
* import { useLiveAudienceState } from '@/uni_modules/tuikit-atomic-x/state/LiveAudienceState';
* const { audienceCount } = useLiveAudienceState('your_live_id');
*
* // 监听观众数量变化
* watch(audienceCount, (newCount) => {
* console.log('观众数量更新:', newCount);
* // 当观众数量达到某个阈值时可以进行特殊处理
* if (newCount >= 100) {
* console.log('直播热度很高观众数超过100');
* }
* });
*
* // 获取当前观众数量
* const count = audienceCount.value;
* console.log('当前观众数量:', count);
*/
const audienceCount = ref<number>(0);
/**
* 获取直播间观众列表
* @param {FetchAudienceListOptions} [params] - 获取观众列表参数
* @returns {void}
* @memberof module:LiveAudienceState
* @example
* import { useLiveAudienceState } from '@/uni_modules/tuikit-atomic-x/state/LiveAudienceState';
* const { fetchAudienceList } = useLiveAudienceState("your_live_id");
* fetchAudienceList();
*/
function fetchAudienceList(params ?: FetchAudienceListOptions) : void {
callUTSFunction("fetchAudienceList", params || {});
}
/**
* 设置管理员
* @param {SetAdministratorOptions} params - 设置管理员参数
* @returns {void}
* @memberof module:LiveAudienceState
* @example
* import { useLiveAudienceState } from '@/uni_modules/tuikit-atomic-x/state/LiveAudienceState';
* const { setAdministrator } = useLiveAudienceState("your_live_id");
* setAdministrator({ userID: 'user123' });
*/
function setAdministrator(params : SetAdministratorOptions) : void {
callUTSFunction("setAdministrator", params);
}
/**
* 撤销管理员权限
* @param {RevokeAdministratorOptions} params - 撤销管理员参数
* @returns {void}
* @memberof module:LiveAudienceState
* @example
* import { useLiveAudienceState } from '@/uni_modules/tuikit-atomic-x/state/LiveAudienceState';
* const { revokeAdministrator } = useLiveAudienceState("your_live_id");
* revokeAdministrator({ userID: 'user123' });
*/
function revokeAdministrator(params : RevokeAdministratorOptions) : void {
callUTSFunction("revokeAdministrator", params);
}
/**
* 将用户踢出直播间
* @param {KickUserOutOfRoomOptions} params - 踢出用户参数
* @returns {void}
* @memberof module:LiveAudienceState
* @example
* import { useLiveAudienceState } from '@/uni_modules/tuikit-atomic-x/state/LiveAudienceState';
* const { kickUserOutOfRoom } = useLiveAudienceState("your_live_id");
* kickUserOutOfRoom({ userID: 'user123' });
*/
function kickUserOutOfRoom(params : KickUserOutOfRoomOptions) : void {
callUTSFunction("kickUserOutOfRoom", params);
}
/**
* 禁用用户发送消息
* @param {DisableSendMessageOptions} params - 禁用发送消息参数
* @returns {void}
* @memberof module:LiveAudienceState
* @example
* import { useLiveAudienceState } from '@/uni_modules/tuikit-atomic-x/state/LiveAudienceState';
* const { disableSendMessage } = useLiveAudienceState("your_live_id");
* disableSendMessage({ userID: 'user123', disable: true });
*/
function disableSendMessage(params : DisableSendMessageOptions) : void {
callUTSFunction("disableSendMessage", params);
}
/**
* 添加观众事件监听
* @param {string} liveID - 直播间ID
* @param {string} eventName - 事件名称,可选值: 'onAudienceJoined'(观众加入)<br>'onAudienceLeft'(观众离开)
* @param {ILiveListener} listener - 事件回调函数
* @returns {void}
* @memberof module:LiveAudienceState
* @example
* import { useLiveAudienceState } from '@/uni_modules/tuikit-atomic-x/state/LiveAudienceState';
* const { addAudienceListener } = useLiveAudienceState("your_live_id");
* addAudienceListener('your_live_id', 'onAudienceJoined', {
* callback: (params) => {
* console.log('result:', params);
* }
* });
*/
function addAudienceListener(liveID : string, eventName : string, listener : ILiveListener) : void {
getRTCRoomEngineManager().addAudienceListener(liveID, eventName, listener);
}
/**
* 移除观众事件监听
* @param {string} liveID - 直播间ID
* @param {string} eventName - 事件名称,可选值: 'onAudienceJoined'(观众加入)<br>'onAudienceLeft'(观众离开)
* @param {ILiveListener} listener - 事件回调函数
* @returns {void}
* @memberof module:LiveAudienceState
* @example
* import { useLiveAudienceState } from '@/uni_modules/tuikit-atomic-x/state/LiveAudienceState';
* const { removeAudienceListener } = useLiveAudienceState("your_live_id");
* removeAudienceListener('your_live_id', 'onAudienceJoined', audienceListener);
*/
function removeAudienceListener(liveID : string, eventName : string, listener : ILiveListener) : void {
getRTCRoomEngineManager().removeAudienceListener(liveID, eventName, listener);
}
const onLiveAudienceStoreChanged = (eventName : string, res : string) : void => {
try {
if (eventName === "audienceList") {
audienceList.value = safeJsonParse<LiveUserInfoParam[]>(res, []);
} else if (eventName === "audienceCount") {
audienceCount.value = safeJsonParse<number>(res, 0);
}
} catch (error) {
console.error("onLiveAudienceStoreChanged error:", error);
}
};
function bindEvent(liveID : string) : void {
getRTCRoomEngineManager().on("liveAudienceStoreChanged", onLiveAudienceStoreChanged, liveID);
}
export function useLiveAudienceState(liveID : string) {
bindEvent(liveID);
return {
audienceList, // 直播间观众列表
audienceCount, // 直播间观众数量
fetchAudienceList, // 获取观众列表
setAdministrator, // 设置管理员
revokeAdministrator, // 撤销管理员权限
kickUserOutOfRoom, // 将用户踢出直播间
disableSendMessage, // 禁用用户发送消息
addAudienceListener, // 添加观众事件监听
removeAudienceListener, // 移除观众事件监听
};
}
export default useLiveAudienceState;