From 8245d3446ade8b2fab32d8d0b2b737af48ef870d Mon Sep 17 00:00:00 2001 From: acgist <289547414@qq.com> Date: Tue, 27 Jun 2023 08:31:46 +0800 Subject: [PATCH] =?UTF-8?q?[*]=20=E6=97=A5=E5=B8=B8=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- taoyao-client-media/src/Taoyao.js | 76 +++++++++++-------- .../src/components/RemoteClient.vue | 2 +- .../src/components/SessionClient.vue | 2 +- taoyao-client-web/src/components/Taoyao.js | 24 +++--- 4 files changed, 57 insertions(+), 47 deletions(-) diff --git a/taoyao-client-media/src/Taoyao.js b/taoyao-client-media/src/Taoyao.js index 7c68832..dc32cbe 100644 --- a/taoyao-client-media/src/Taoyao.js +++ b/taoyao-client-media/src/Taoyao.js @@ -363,20 +363,17 @@ class Room { me.transports.forEach(v => v.close()); me.mediasoupRouter.close(); } - -} - -// TODO:continue +}; /** - * 桃夭 + * 桃夭信令 */ class Taoyao { // 是否连接 connect = false; - // 房间列表 + // 房间列表:房间ID=房间 rooms = new Map(); - // 回调事件 + // 回调事件:消息ID=事件 callbackMapping = new Map(); // Worker列表 mediasoupWorkers = []; @@ -384,6 +381,7 @@ class Taoyao { nextMediasoupWorkerIndex = 0; constructor(mediasoupWorkers) { + console.info("加载媒体桃夭信令"); this.mediasoupWorkers = mediasoupWorkers; // 定时打印使用情况 setInterval(async () => { @@ -398,29 +396,31 @@ class Taoyao { */ on(message) { const me = this; + // 解构 + const { header, body } = message; + const { id, signal } = header; // 请求回调 - if (me.callbackMapping.has(message.header.id)) { + if (me.callbackMapping.has(id)) { try { - me.callbackMapping.get(message.header.id)(message); + me.callbackMapping.get(id)(message); } finally { - me.callbackMapping.delete(message.header.id); + me.callbackMapping.delete(id); } return; } // 执行信令 - const body = message.body; - switch (message.header.signal) { + switch (signal) { case "client::reboot": me.clientReboot(message, body); break; + case "client::register": + me.clientRegister(message, body); + break; case "client::shutdown": me.clientShutdown(message, body); break; - case "client::register": - protocol.clientIndex = body.index; - break; - case "media::ice::restart": - me.mediaIceRestart(message, body); + case "control::server::record": + me.controlServerRecord(message, body); break; case "media::consume": me.mediaConsume(message, body); @@ -467,9 +467,6 @@ class Taoyao { case "media::producer::resume": me.mediaProducerResume(message, body); break; - case "control::server::record": - me.controlServerRecord(message, body); - break; case "media::router::rtp::capabilities": me.mediaRouterRtpCapabilities(message, body); break; @@ -506,7 +503,7 @@ class Taoyao { try { signalChannel.channel.send(JSON.stringify(message)); } catch (error) { - console.error("异步请求异常:", message, error); + console.error("异步请求异常", message, error); } } @@ -520,11 +517,18 @@ class Taoyao { async request(message) { const me = this; return new Promise((resolve, reject) => { - let done = false; - // 注册回调 - me.callbackMapping.set(message.header.id, (response) => { + const { header, body } = message; + const { id } = header; + // 设置超时 + const rejectTimeout = setTimeout(() => { + me.callbackMapping.delete(id); + reject("请求超时", message); + }, 5000); + // 请求回调 + me.callbackMapping.set(id, (response) => { resolve(response); - done = true; + clearTimeout(rejectTimeout); + return true; }); // 发送消息 try { @@ -532,16 +536,11 @@ class Taoyao { } catch (error) { reject("同步请求异常", error); } - // 设置超时 - setTimeout(() => { - if (!done) { - me.callbackMapping.delete(message.header.id); - reject("请求超时", message); - } - }, 5000); }); } + // TODO:continue + /** * 打印日志 */ @@ -590,6 +589,17 @@ class Taoyao { // this.push(message); } + /** + * 终端注册信令 + * + * @param {*} message 消息 + * @param {*} body 消息主体 + */ + clientRegister(message, body) { + protocol.clientIndex = body.index; + console.debug("终端序号", protocol.clientIndex); + } + /** * 关闭终端信令 * @@ -1766,6 +1776,6 @@ class Taoyao { // console.info("mediasoupRouter newrtpobserver:", roomId, mediasoupRouter.id, rtpObserver.id); // }); } -} +}; module.exports = { Taoyao, signalChannel }; diff --git a/taoyao-client-web/src/components/RemoteClient.vue b/taoyao-client-web/src/components/RemoteClient.vue index 6d994a7..18fbc1f 100644 --- a/taoyao-client-web/src/components/RemoteClient.vue +++ b/taoyao-client-web/src/components/RemoteClient.vue @@ -102,7 +102,7 @@ export default { this.audioStream.addTrack(track); this.audio.srcObject = this.audioStream; } - this.audio.play().catch((error) => console.warn("视频播放失败", error)); + this.audio.play().catch((error) => console.warn("音频播放失败", error)); } else if(track.kind === 'video') { this.videoConsumer = consumer; if (this.videoStream) { diff --git a/taoyao-client-web/src/components/SessionClient.vue b/taoyao-client-web/src/components/SessionClient.vue index 6bfd256..64639d7 100644 --- a/taoyao-client-web/src/components/SessionClient.vue +++ b/taoyao-client-web/src/components/SessionClient.vue @@ -99,7 +99,7 @@ export default { this.audioStream.addTrack(track); this.audio.srcObject = this.audioStream; } - this.audio.play().catch((error) => console.warn("视频播放失败", error)); + this.audio.play().catch((error) => console.warn("音频播放失败", error)); } else if(track.kind === 'video') { if (this.videoStream) { // TODO:资源释放 diff --git a/taoyao-client-web/src/components/Taoyao.js b/taoyao-client-web/src/components/Taoyao.js index 36d531f..a61f97b 100644 --- a/taoyao-client-web/src/components/Taoyao.js +++ b/taoyao-client-web/src/components/Taoyao.js @@ -601,11 +601,18 @@ class Taoyao extends RemoteClient { async request(message) { const me = this; return new Promise((resolve, reject) => { - let done = false; + const { header, body } = message; + const { id } = header; + // 设置超时 + const rejectTimeout = setTimeout(() => { + me.callbackMapping.delete(id); + reject("请求超时", message); + }, 5000); // 请求回调 - me.callbackMapping.set(message.header.id, (response) => { + me.callbackMapping.set(id, (response) => { resolve(response); - done = true; + clearTimeout(rejectTimeout); + // 默认不用继续处理 return true; }); // 发送消息 @@ -614,13 +621,6 @@ class Taoyao extends RemoteClient { } catch (error) { reject("同步请求异常", error); } - // 设置超时 - setTimeout(() => { - if (!done) { - me.callbackMapping.delete(message.header.id); - reject("请求超时", message); - } - }, 5000); }); } /************************ 回调 ************************/ @@ -939,8 +939,8 @@ class Taoyao extends RemoteClient { * @param {*} message 消息 */ defaultClientRegister(message) { - const { index } = message.body; - protocol.clientIndex = index; + protocol.clientIndex = message.body.index; + console.debug("终端序号", protocol.clientIndex); } /** * 关闭终端信令