消息模块开发完成
This commit is contained in:
@@ -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 - 用户信息
|
||||
|
||||
Reference in New Issue
Block a user