From 4f6ae876d7046e7a914730ad7a606b54e2bdffe2 Mon Sep 17 00:00:00 2001 From: acgist <289547414@qq.com> Date: Mon, 27 Feb 2023 08:15:23 +0800 Subject: [PATCH] =?UTF-8?q?[+]=20=E7=BB=88=E7=AB=AF=E5=91=8A=E8=AD=A6?= =?UTF-8?q?=E4=BF=A1=E4=BB=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- taoyao-client-web/src/App.vue | 25 ++- .../src/components/LocalClient.vue | 17 +- taoyao-client-web/src/components/Taoyao.js | 207 +++++++++--------- .../src/components/TaoyaoClient.js | 6 - taoyao-signal-server/README.md | 7 - .../signal/flute/media/DataConsumer.java | 34 +++ .../signal/flute/media/DataProducer.java | 35 ++- .../protocol/client/ClientAlarmProtocol.java | 15 +- 8 files changed, 203 insertions(+), 143 deletions(-) delete mode 100644 taoyao-client-web/src/components/TaoyaoClient.js diff --git a/taoyao-client-web/src/App.vue b/taoyao-client-web/src/App.vue index aafc4cf..f925729 100644 --- a/taoyao-client-web/src/App.vue +++ b/taoyao-client-web/src/App.vue @@ -6,6 +6,7 @@ width="30%" title="终端设置" :show-close="false" + v-if="taoyao === null" v-model="signalVisible" > @@ -81,7 +82,7 @@ diff --git a/taoyao-client-web/src/components/Taoyao.js b/taoyao-client-web/src/components/Taoyao.js index dd549ae..7c6fe62 100644 --- a/taoyao-client-web/src/components/Taoyao.js +++ b/taoyao-client-web/src/components/Taoyao.js @@ -1,7 +1,6 @@ /** * 桃夭 */ -import { TaoyaoClient } from "./TaoyaoClient.js"; import * as mediasoupClient from "mediasoup-client"; import { protocol, @@ -30,9 +29,7 @@ const signalChannel = { channel: null, // 地址 address: null, - // 回调 - callback: null, - // 回调事件 + // 请求回调 callbackMapping: new Map(), // 心跳时间 heartbeatTime: 30 * 1000, @@ -156,15 +153,15 @@ const signalChannel = { } // 前置回调 if (!done) { - await self.preCallback(message); + await self.taoyao.preCallback(message); } // 全局回调 if (!done && self.callback) { - done = await self.callback(message); + done = await self.taoyao.callback(message); } // 后置回调 if (!done) { - await self.postCallback(message); + await self.taoyao.postCallback(message); } }; }); @@ -257,103 +254,6 @@ const signalChannel = { clearTimeout(self.heartbeatTimer); clearTimeout(self.reconnectTimer); }, - /** - * 前置回调 - * - * @param {*} message - */ - async preCallback(message) { - const self = this; - switch (message.header.signal) { - case "client::config": - self.defaultClientConfig(message); - break; - case "client::register": - console.info("终端注册成功"); - break; - case "media::consume": - await self.taoyao.consumeMedia(message); - break; - } - }, - /** - * 后置回调 - * - * @param {*} message 消息 - */ - async postCallback(message) { - const self = this; - switch (message.header.signal) { - case "client::reboot": - self.defaultClientReboot(message); - break; - case "client::shutdown": - self.defaultClientShutdown(message); - break; - case "room::enter": - self.defaultRoomEnter(message); - break; - case "room::client::list": - self.defaultRoomClientList(message); - break; - case "platform::error": - self.callbackError(message); - break; - } - }, - /** - * 配置默认回调 - * - * @param {*} message 消息 - */ - defaultClientConfig(message) { - const self = this; - self.taoyao.audio = { ...defaultAudioConfig, ...message.body.media.audio }; - self.taoyao.video = { ...defaultVideoConfig, ...message.body.media.video }; - self.taoyao.webrtc = message.body.webrtc; - console.debug( - "终端配置", - self.taoyao.audio, - self.taoyao.video, - self.taoyao.webrtc - ); - }, - /** - * 终端重启默认回调 - * - * @param {*} message 消息 - */ - defaultClientReboot(message) { - console.info("重启终端"); - location.reload(); - }, - /** - * 终端重启默认回调 - * - * @param {*} message 消息 - */ - defaultClientShutdown(message) { - console.info("关闭终端"); - window.close(); - }, - defaultRoomEnter(message) { - const { roomId, clientId } = message.body; - if(clientId === this.taoyao.clientId) { - // 忽略自己 - } else { - this.taoyao.remoteClients.set(clientId, roomId); - } - }, - defaultRoomClientList(message) { - const self = this; - message.body.forEach(v => { - if(v.clientId === self.taoyao.clientId) { - // 忽略自己 - } else { - self.taoyao.remoteClients.set(v.clientId, self.taoyao.roomId); - } - }); - }, }; /** @@ -479,6 +379,103 @@ class Taoyao { callback ); } + /** + * 前置回调 + * + * @param {*} message + */ + async preCallback(message) { + const self = this; + switch (message.header.signal) { + case "client::config": + self.defaultClientConfig(message); + break; + case "client::register": + console.info("终端注册成功"); + break; + case "media::consume": + await self.consumeMedia(message); + break; + } + } + /** + * 后置回调 + * + * @param {*} message 消息 + */ + async postCallback(message) { + const self = this; + switch (message.header.signal) { + case "client::reboot": + self.defaultClientReboot(message); + break; + case "client::shutdown": + self.defaultClientShutdown(message); + break; + case "room::enter": + self.defaultRoomEnter(message); + break; + case "room::client::list": + self.defaultRoomClientList(message); + break; + case "platform::error": + self.callbackError(message); + break; + } + } + /** + * 配置默认回调 + * + * @param {*} message 消息 + */ + defaultClientConfig(message) { + const self = this; + self.audio = { ...defaultAudioConfig, ...message.body.media.audio }; + self.video = { ...defaultVideoConfig, ...message.body.media.video }; + self.webrtc = message.body.webrtc; + console.debug( + "终端配置", + self.audio, + self.video, + self.webrtc + ); + } + /** + * 终端重启默认回调 + * + * @param {*} message 消息 + */ + defaultClientReboot(message) { + console.info("重启终端"); + location.reload(); + } + /** + * 终端重启默认回调 + * + * @param {*} message 消息 + */ + defaultClientShutdown(message) { + console.info("关闭终端"); + window.close(); + } + defaultRoomEnter(message) { + const { roomId, clientId } = message.body; + if (clientId === this.clientId) { + // 忽略自己 + } else { + this.remoteClients.set(clientId, roomId); + } + } + defaultRoomClientList(message) { + const self = this; + message.body.forEach((v) => { + if (v.clientId === self.clientId) { + // 忽略自己 + } else { + self.remoteClients.set(v.clientId, self.roomId); + } + }); + } /** * 错误回调 */ @@ -1091,7 +1088,7 @@ class Taoyao { console.log("消费者", consumer); self.callbackMedia("remote", consumer.track, consumer); - + // If audio-only mode is enabled, pause it. if (consumer.kind === "video" && !self.videoProduce) { // this.pauseConsumer(consumer); diff --git a/taoyao-client-web/src/components/TaoyaoClient.js b/taoyao-client-web/src/components/TaoyaoClient.js deleted file mode 100644 index ed81688..0000000 --- a/taoyao-client-web/src/components/TaoyaoClient.js +++ /dev/null @@ -1,6 +0,0 @@ -/** - * 桃夭终端 - */ -class TaoyaoClient {} - -export { TaoyaoClient }; diff --git a/taoyao-signal-server/README.md b/taoyao-signal-server/README.md index 03c8506..5f62132 100644 --- a/taoyao-signal-server/README.md +++ b/taoyao-signal-server/README.md @@ -13,10 +13,3 @@ [信令格式](https://localhost:8888/protocol/list) -## 测试脚本 - -``` -let socket = new WebSocket("wss://localhost:8888/websocket.signal"); -socket.send('{"header":{"signal":"client::register","v":"1.0.0","id":"1"},"body":{"username":"taoyao","password":"taoyao","clientId":"taoyao"}}'); -socket.send('{"header":{"signal":"client::heartbeat","v":"1.0.0","id":"1"},"body":{}}'); -``` diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/flute/media/DataConsumer.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/flute/media/DataConsumer.java index c07dc05..923e1ad 100644 --- a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/flute/media/DataConsumer.java +++ b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/flute/media/DataConsumer.java @@ -1,5 +1,39 @@ package com.acgist.taoyao.signal.flute.media; +import lombok.Getter; +import lombok.Setter; + +/** + * 数据消费者 + * + * @author acgist + */ +@Getter +@Setter public class DataConsumer { + /** + * 消费者终端 + */ + private final ClientWrapper consumeClient; + /** + * 生产者 + */ + private final Producer producer; + /** + * 数据流ID + */ + private final String streamId; + /** + * 消费者标识 + */ + private final String consumerId; + + public DataConsumer(ClientWrapper consumeClient, Producer producer, String streamId, String consumerId) { + this.consumeClient = consumeClient; + this.producer = producer; + this.streamId = streamId; + this.consumerId = consumerId; + } + } diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/flute/media/DataProducer.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/flute/media/DataProducer.java index e0b5deb..d2c2ffc 100644 --- a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/flute/media/DataProducer.java +++ b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/flute/media/DataProducer.java @@ -1,9 +1,42 @@ package com.acgist.taoyao.signal.flute.media; import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import lombok.Getter; +import lombok.Setter; + +/** + * 数据生产者 + * + * @author acgist + */ +@Setter +@Getter public class DataProducer { - private Map dataConsumers; + /** + * 生产者终端 + */ + private final ClientWrapper produceClient; + /** + * 数据流ID + */ + private final String streamId; + /** + * 生产者标识 + */ + private final String producerId; + /** + * 消费者 + */ + private final Map dataConsumers; + + public DataProducer(ClientWrapper produceClient, String streamId, String producerId) { + this.produceClient = produceClient; + this.streamId = streamId; + this.producerId = producerId; + this.dataConsumers = new ConcurrentHashMap<>(); + } } diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/client/ClientAlarmProtocol.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/client/ClientAlarmProtocol.java index ab526ee..da6036c 100644 --- a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/client/ClientAlarmProtocol.java +++ b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/client/ClientAlarmProtocol.java @@ -39,16 +39,21 @@ public class ClientAlarmProtocol extends ProtocolClientAdapter { @Override public void execute(String clientId, ClientType clientType, Client client, Message message, Map body) { + final String alarmMessage = MapUtils.get(body, Constant.MESSAGE); + final String alarmDatetime = MapUtils.get(body, Constant.DATETIME); log.warn( """ - 终端发生告警:{} - {} - {} + 终端告警:{} + 终端类型:{} + 告警描述:{} + 告警时间:{} """, clientId, - MapUtils.get(body, Constant.MESSAGE), - MapUtils.get(body, Constant.DATETIME) + clientType, + alarmMessage, + alarmDatetime ); + // 业务逻辑 } }