消息模块开发完成

This commit is contained in:
2026-05-18 23:03:28 +08:00
parent 2c6a7af31b
commit 85c0b0226d
6 changed files with 202 additions and 5 deletions

View File

@@ -56,6 +56,8 @@ class CallStateManager {
// 监听器数组
this.listeners = [];
this.socketEventHandlers = {};
this._socketInviteBound = false;
}
// 订阅状态变化
@@ -339,10 +341,68 @@ class CallStateManager {
// 创建信令实例
this._signaling = this.useWebSocket ? new WebSocketSignaling() : new Signaling();
await this._signaling.start();
this._bindSocketInviteEvents(this._signaling);
console.log('Signaling connected (WebSocket only, no room yet)');
return this._signaling;
}
_bindSocketInviteEvents(signaling) {
if (!signaling || this._socketInviteBound || typeof signaling.addEventListener !== 'function') {
return;
}
['invite-call', 'invite-accepted', 'invite-rejected', 'invite-failed'].forEach((eventName) => {
signaling.addEventListener(eventName, (event) => {
const handler = this.socketEventHandlers[eventName];
if (typeof handler === 'function') {
handler(event.detail);
}
});
});
this._socketInviteBound = true;
}
onSocketEvent(eventName, handler) {
this.socketEventHandlers[eventName] = handler;
}
getActiveSignaling() {
if (this._signaling) {
return this._signaling;
}
if (this.renderstreaming && this.renderstreaming._signaling) {
return this.renderstreaming._signaling;
}
return null;
}
sendInviteCall(payload) {
const signaling = this.getActiveSignaling();
if (!signaling || typeof signaling.sendInviteCall !== 'function') {
throw new Error('Invite signaling is not ready');
}
signaling.sendInviteCall(payload);
}
sendInviteAccepted(payload) {
const signaling = this.getActiveSignaling();
if (!signaling || typeof signaling.sendInviteAccepted !== 'function') {
throw new Error('Invite signaling is not ready');
}
signaling.sendInviteAccepted(payload);
}
sendInviteRejected(payload) {
const signaling = this.getActiveSignaling();
if (!signaling || typeof signaling.sendInviteRejected !== 'function') {
throw new Error('Invite signaling is not ready');
}
signaling.sendInviteRejected(payload);
}
/**
* 在仅建立WebSocket连接时同步当前用户信息
* @param {{ id?: string, name?: string, avatar?: string } | null} userInfo - 用户信息