需要添加直播接口
This commit is contained in:
136
uni_modules/tuikit-atomic-x/state/BarrageState.ts
Normal file
136
uni_modules/tuikit-atomic-x/state/BarrageState.ts
Normal file
@@ -0,0 +1,136 @@
|
||||
/**
|
||||
* @module BarrageState
|
||||
* 弹幕管理管理模块
|
||||
* @module_description
|
||||
* 核心功能:处理直播间内的文本消息、自定义消息等弹幕功能,支持弹幕发送、消息状态同步等。
|
||||
* 技术特点:支持高并发消息处理、实时消息同步、消息过滤、表情包支持等高级功能。
|
||||
* 业务价值:为直播平台提供核心的互动能力,增强用户参与度和直播氛围。
|
||||
* 应用场景:弹幕互动、消息管理、表情包、聊天室等社交互动场景。
|
||||
*/
|
||||
import { ref } from "vue";
|
||||
import {
|
||||
SendTextMessageOptions, SendCustomMessageOptions, BarrageParam, AppendLocalTipOptions
|
||||
} from "@/uni_modules/tuikit-atomic-x";
|
||||
|
||||
import { getRTCRoomEngineManager } from "./rtcRoomEngine";
|
||||
import { callUTSFunction, safeJsonParse } from "../utils/utsUtils";
|
||||
|
||||
|
||||
/**
|
||||
* 当前房间的弹幕消息列表
|
||||
* @type {Ref<BarrageParam[]>}
|
||||
* @memberof module:BarrageState
|
||||
* @example
|
||||
* import { useBarrageState } from '@/uni_modules/tuikit-atomic-x/state/BarrageState';
|
||||
* const { messageList } = useBarrageState('your_live_id');
|
||||
*
|
||||
* // 监听弹幕消息列表变化
|
||||
* watch(messageList, (newMessages) => {
|
||||
* if (newMessages && newMessages.length > 0) {
|
||||
* console.log('弹幕消息列表更新:', newMessages);
|
||||
* newMessages.forEach(msg => {
|
||||
* console.log('消息内容:', msg.content);
|
||||
* console.log('发送者:', msg.sender);
|
||||
* });
|
||||
* }
|
||||
* });
|
||||
*
|
||||
* // 获取当前弹幕列表
|
||||
* const messages = messageList.value;
|
||||
* console.log('当前弹幕数量:', messages.length);
|
||||
*/
|
||||
const messageList = ref<BarrageParam[]>([]);
|
||||
|
||||
/**
|
||||
* 是否允许发送消息
|
||||
* @type {Ref<boolean>}
|
||||
* @memberof module:BarrageState
|
||||
* @example
|
||||
* import { useBarrageState } from '@/uni_modules/tuikit-atomic-x/state/BarrageState';
|
||||
* const { allowSendMessage } = useBarrageState('your_live_id');
|
||||
*
|
||||
* // 监听消息发送权限变化
|
||||
* watch(allowSendMessage, (newAllow) => {
|
||||
* console.log('是否允许发送消息:', newAllow);
|
||||
* });
|
||||
*
|
||||
* // 检查当前是否允许发送消息
|
||||
* const allowSend = allowSendMessage.value;
|
||||
* if (allowSend) {
|
||||
* console.log('已启用消息发送功能');
|
||||
* }
|
||||
*/
|
||||
const allowSendMessage = ref<boolean>(false);
|
||||
|
||||
/**
|
||||
* 发送文本类型弹幕。
|
||||
* @param {SendTextMessageOptions} params - 发送文本弹幕参数
|
||||
* @returns {void}
|
||||
* @memberof module:BarrageState
|
||||
* @example
|
||||
* import { useBarrageState } from '@/uni_modules/tuikit-atomic-x/state/BarrageState';
|
||||
* const { sendTextMessage } = useBarrageState('your_live_id');
|
||||
* sendTextMessage({ liveID: "your_live_id", text: 'Hello World' });
|
||||
*/
|
||||
function sendTextMessage(params : SendTextMessageOptions) : void {
|
||||
callUTSFunction("sendTextMessage", params);
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加本地提示消息。
|
||||
* @param {AppendLocalTipOptions} params - 添加本地提示消息参数
|
||||
* @returns {void}
|
||||
* @memberof module:BarrageState
|
||||
* @example
|
||||
* import { useBarrageState } from '@/uni_modules/tuikit-atomic-x/state/BarrageState';
|
||||
* const { appendLocalTip } = useBarrageState('your_live_id');
|
||||
* appendLocalTip({ liveID: "your_live_id", message: { text: 'Hello World' } });
|
||||
*/
|
||||
function appendLocalTip(params : AppendLocalTipOptions) : void {
|
||||
getRTCRoomEngineManager()["appendLocalTip"](params);
|
||||
}
|
||||
|
||||
/**
|
||||
* 发送自定义类型弹幕。
|
||||
* @param {SendCustomMessageOptions} params - 发送自定义类型弹幕参数
|
||||
* @returns {void}
|
||||
* @memberof module:BarrageState
|
||||
* @example
|
||||
* import { useBarrageState } from '@/uni_modules/tuikit-atomic-x/state/BarrageState';
|
||||
* const { sendCustomMessage } = useBarrageState('your_live_id');
|
||||
* sendCustomMessage({ liveID: "your_live_id", businessID: "livekit", data: JSON.stringify("my custom message"});
|
||||
*/
|
||||
function sendCustomMessage(params : SendCustomMessageOptions) : void {
|
||||
callUTSFunction("sendCustomMessage", params);
|
||||
}
|
||||
|
||||
const onBarrageStoreChanged = (eventName : string, res : string) : void => {
|
||||
try {
|
||||
if (eventName === "messageList") {
|
||||
const data = safeJsonParse<BarrageParam[]>(res, []);
|
||||
messageList.value = data;
|
||||
} else if (eventName === "allowSendMessage") {
|
||||
const data = safeJsonParse<boolean>(res, false);
|
||||
allowSendMessage.value = data;
|
||||
}
|
||||
} catch (error) {
|
||||
console.error("onBarrageStoreChanged JSON parse error:", error);
|
||||
}
|
||||
};
|
||||
|
||||
function bindEvent(liveID : string) {
|
||||
getRTCRoomEngineManager().on("barrageStoreChanged", onBarrageStoreChanged, liveID);
|
||||
}
|
||||
export function useBarrageState(liveID : string) {
|
||||
bindEvent(liveID);
|
||||
return {
|
||||
messageList, // 当前房间的弹幕消息列表
|
||||
|
||||
// allowSendMessage, // 是否允许发送消息 TODO:待支持
|
||||
sendTextMessage, // 发送文本消息方法
|
||||
sendCustomMessage, // 发送自定义消息方法
|
||||
appendLocalTip // 添加本地提示消息方法
|
||||
};
|
||||
}
|
||||
|
||||
export default useBarrageState;
|
||||
Reference in New Issue
Block a user