需要添加直播接口
This commit is contained in:
204
uni_modules/tuikit-atomic-x/state/LiveAudienceState.ts
Normal file
204
uni_modules/tuikit-atomic-x/state/LiveAudienceState.ts
Normal 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;
|
||||
Reference in New Issue
Block a user