2023-03-06 17:57:39 +08:00

136 lines
3.5 KiB
JavaScript

import TIM from 'tim-wx-sdk';
import TUICallEngine, { EVENT } from 'tuicall-engine-wx';
/**
* @param sdkAppID 用户的sdkAppID 必传
* @param userID 用户的userID 必传
* @param userSig 用户的userSig 必传
* @param globalCallPagePath 跳转的路径 必传
* @param tim tim实例 非必传
*/
export class CallManager {
sdkAppID = 0
userID = ''
userSig = ''
tim = null
globalCallPagePath = []
constructor() {
}
async init(params) {
const { sdkAppID, SDKAppID, userID, tim, globalCallPagePath, userSig } = params;
this.sdkAppID = sdkAppID || SDKAppID;
this.userID = userID;
this.userSig = userSig;
this.globalCallPagePath = globalCallPagePath;
this.tim = tim;
// 挂载全局变量
wx.$globalCallSign = true;
// 设置标志位 用于移除监听
wx.$CallManagerInstance = this;
if (!this.tim) {
this.tim = TIM.create({
SDKAppID: this.sdkAppID,
});
}
// 创建 TUICallEngine 实例
wx.$TUICallEngine = TUICallEngine.createInstance({
sdkAppID: this.sdkAppID,
tim: this.tim,
});
// 调用 init 方法
await wx.$TUICallEngine.init({
userID: this.userID,
userSig: this.userSig,
});
// 监听 TUICallEngine 内部的 TSignaling 事件
this.addEngineInvite();
};
addEngineInvite() {
wx.$TUICallEngine.on(EVENT.INVITED, this.handleNewInvitationReceived, this);
};
addEngineCallEnd() {
// 通话被取消
wx.$TUICallEngine.on(EVENT.CALLING_CANCEL, this.handleCallEnd, this);
// 通话结束
wx.$TUICallEngine.on(EVENT.CALL_END, this.handleCallEnd, this);
}
removeEngineInvite() {
wx.$TUICallEngine.off(EVENT.INVITED, this.handleNewInvitationReceived, this);
this.removeEngineCallEnd();
}
removeEngineCallEnd() {
// 若当前已在globalCall页面 则无需处理
if (this.getRoute().route === this.globalCallPagePath) {
return;
}
// 通话被取消
wx.$TUICallEngine.off(EVENT.CALLING_CANCEL, this.handleCallEnd, this);
// 通话结束
wx.$TUICallEngine.off(EVENT.CALL_END, this.handleCallEnd, this);
}
handleNewInvitationReceived(event) {
// 若当前已在globalCall页面 则无需处理
if (this.getRoute().route === this.globalCallPagePath) {
return;
}
// 监听 TUICallEngine 自身的通话结束事件
this.addEngineCallEnd();
const configData = {
sdkAppID: this.sdkAppID,
userID: this.userID,
userSig: this.userSig,
};
wx.navigateTo({
url: `/${this.globalCallPagePath}?data=${JSON.stringify(event)}&configData=${JSON.stringify(configData)}`,
});
};
handleCallEnd() {
wx.$TUICallEngine._resetTUICallEngine();
wx.navigateBack({
success: () => {
},
fail: () => {
},
complete: () => {
wx.$TUICallEngine.off(EVENT.CALLING_CANCEL, this.handleCallEnd, this);
wx.$TUICallEngine.off(EVENT.CALL_END, this.handleCallEnd, this);
},
});
}
// 获取当前的页面地址
getRoute() {
const pages = getCurrentPages();
const currentPage = pages[pages.length - 1];
return currentPage;
}
// 卸载 callManger
destroyed() {
this.removeEngineInvite();
this.reset();
wx.$globalCallSign = false;
wx.$TUICallEngine = null;
}
reset() {
this.sdkAppID = 0;
this.userID = '';
this.userSig = '';
this.tim = null;
this.globalCallPagePath = '';
}
};