From 42e00e1c0bae194e80ff136dacce81de01a41160 Mon Sep 17 00:00:00 2001 From: acgist <289547414@qq.com> Date: Mon, 31 Jul 2023 08:13:48 +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-web/src/components/Taoyao.js | 101 +++++++++++++++--- .../taoyao/controller/ControlController.java | 8 ++ .../signal/controller/ClientController.java | 9 -- .../signal/party/media/OperatorAdapter.java | 8 +- .../protocol/client/ClientStatusProtocol.java | 56 +++++----- .../client/ClientUnicastProtocol.java | 22 ++-- .../protocol/client/ClientWakeupProtocol.java | 31 ------ .../protocol/control/ControlBellProtocol.java | 6 +- .../control/ControlWakeupProtocol.java | 47 ++++++++ .../control/IControlWakeupProtocol.java | 19 ++++ 10 files changed, 210 insertions(+), 97 deletions(-) delete mode 100644 taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/client/ClientWakeupProtocol.java create mode 100644 taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/control/ControlWakeupProtocol.java create mode 100644 taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/control/IControlWakeupProtocol.java diff --git a/taoyao-client-web/src/components/Taoyao.js b/taoyao-client-web/src/components/Taoyao.js index e477706..a30d522 100644 --- a/taoyao-client-web/src/components/Taoyao.js +++ b/taoyao-client-web/src/components/Taoyao.js @@ -789,6 +789,15 @@ class Taoyao extends RemoteClient { case "client::shutdown": me.defaultClientShutdown(message); break; + case "client::unicast": + me.defaultClientUnicast(message); + break; + case "control::bell": + me.defaultControlBell(message); + break; + case "control::wakeup": + me.defaultControlWakeup(message); + break; case "media::audio::volume": me.defaultMediaAudioVolume(message); break; @@ -1175,6 +1184,86 @@ class Taoyao extends RemoteClient { window.close(); } + /** + * 终端状态信令 + * + * @param {*} clientId 终端ID + * + * @returns 终端状态 + */ + async clientStatus(clientId) { + const response = await this.request(protocol.buildMessage("client::status", { + clientId + })); + return response.body; + } + + /** + * 终端单播信令 + * + * @param {*} clientId 接收终端ID + * @param {*} message 消息内容 + */ + clientUnicast(clientId, message) { + this.push(protocol.buildMessage("client::unicast", { + ...message, + to: clientId + })); + } + + /** + * 终端单播信令 + * + * @param {*} message 信令消息 + */ + defaultClientUnicast(message) { + console.debug("终端单播消息", message); + } + + /** + * 响铃信令 + * + * @param {*} clientId 目标终端ID + * @param {*} enabled 是否响铃 + */ + ControlBell(clientId, enabled) { + this.request(protocol.buildMessage("control::bell", { + enabled, + to: clientId, + })); + } + + /** + * 响铃信令 + * + * @param {*} message 信令消息 + */ + defaultControlBell(message) { + console.debug("响铃", message); + this.push(message); + } + + /** + * 终端唤醒信令 + * + * @param {*} clientId 目标终端ID + */ + controlWakeup(clientId) { + this.request(protocol.buildMessage("control::wakeup", { + to: clientId + })); + } + + /** + * 终端唤醒信令 + * + * @param {*} message 信令消息 + */ + defaultControlWakeup(message) { + console.debug("终端唤醒", message); + this.push(message); + } + /** * 拍照 * @@ -2151,18 +2240,6 @@ class Taoyao extends RemoteClient { return response.body; } - /** - * @param {*} clientId 终端ID - * - * @returns 终端状态 - */ - async clientStatus(clientId) { - const response = await this.request( - protocol.buildMessage("client::status", { clientId }) - ); - return response.body; - } - /** * 生产媒体 * diff --git a/taoyao-signal-server/taoyao-server/src/main/java/com/acgist/taoyao/controller/ControlController.java b/taoyao-signal-server/taoyao-server/src/main/java/com/acgist/taoyao/controller/ControlController.java index 4417123..5fdf452 100644 --- a/taoyao-signal-server/taoyao-server/src/main/java/com/acgist/taoyao/controller/ControlController.java +++ b/taoyao-signal-server/taoyao-server/src/main/java/com/acgist/taoyao/controller/ControlController.java @@ -15,6 +15,7 @@ import com.acgist.taoyao.signal.protocol.control.IControlConfigAudioProtocol; import com.acgist.taoyao.signal.protocol.control.IControlConfigVideoProtocol; import com.acgist.taoyao.signal.protocol.control.IControlPhotographProtocol; import com.acgist.taoyao.signal.protocol.control.IControlServerRecordProtocol; +import com.acgist.taoyao.signal.protocol.control.IControlWakeupProtocol; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.parameters.RequestBody; @@ -36,6 +37,7 @@ import lombok.RequiredArgsConstructor; public class ControlController { private final IControlBellProtocol controlBellProtocol; + private final IControlWakeupProtocol controlWakeupProtocol; private final IControlPhotographProtocol controlPhotographProtocol; private final IControlConfigAudioProtocol controlConfigAudioProtocol; private final IControlConfigVideoProtocol controlConfigVideoProtocol; @@ -94,4 +96,10 @@ public class ControlController { return this.controlServerRecordProtocol.execute(roomId, clientId, enabled); } + @Operation(summary = "唤醒终端", description = "唤醒终端") + @GetMapping("/wakeup/{clientId}") + public Message wakeup(@PathVariable String clientId) { + return this.controlWakeupProtocol.execute(clientId); + } + } diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/controller/ClientController.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/controller/ClientController.java index a3d392d..189ee03 100644 --- a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/controller/ClientController.java +++ b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/controller/ClientController.java @@ -10,7 +10,6 @@ import com.acgist.taoyao.signal.client.ClientManager; import com.acgist.taoyao.signal.client.ClientStatus; import com.acgist.taoyao.signal.protocol.client.ClientRebootProtocol; import com.acgist.taoyao.signal.protocol.client.ClientShutdownProtocol; -import com.acgist.taoyao.signal.protocol.client.ClientWakeupProtocol; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.Content; @@ -31,7 +30,6 @@ import lombok.RequiredArgsConstructor; public class ClientController { private final ClientManager clientManager; - private final ClientWakeupProtocol clientWakeupProtocol; private final ClientRebootProtocol clientRebootProtocol; private final ClientShutdownProtocol clientShutdownProtocol; @@ -49,13 +47,6 @@ public class ClientController { return Message.success(this.clientManager.getStatus(clientId)); } - @Operation(summary = "唤醒终端", description = "唤醒终端") - @GetMapping("/wakeup/{clientId}") - public Message wakeup(@PathVariable String clientId) { - this.clientWakeupProtocol.execute(clientId); - return Message.success(); - } - @Operation(summary = "重启终端", description = "重启终端") @GetMapping("/reboot/{clientId}") public Message reboot(@PathVariable String clientId) { diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/party/media/OperatorAdapter.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/party/media/OperatorAdapter.java index 27acbf2..4cf5e5e 100644 --- a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/party/media/OperatorAdapter.java +++ b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/party/media/OperatorAdapter.java @@ -38,9 +38,11 @@ public abstract class OperatorAdapter implements Operator { * @return 是否已经关闭 */ protected boolean markClose() { - final boolean old = this.close; - this.close = true; - return old; + synchronized (this) { + final boolean old = this.close; + this.close = true; + return old; + } } } diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/client/ClientStatusProtocol.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/client/ClientStatusProtocol.java index b142b2b..5f43fd4 100644 --- a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/client/ClientStatusProtocol.java +++ b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/client/ClientStatusProtocol.java @@ -27,41 +27,41 @@ import com.acgist.taoyao.signal.protocol.ProtocolClientAdapter; """, """ { - "ip": "终端IP", - "name": "终端名称", - "clientId": "终端ID", - "clientType": "终端类型", - "latitude": 纬度, - "longitude": 经度, - "humidity": 湿度, - "temperature": 温度, - "signal": 信号强度(0~100), - "battery": 电池电量(0~100), - "alarming": 是否发生告警(true|false), - "charging": 是否正在充电(true|false), + "ip" : "终端IP", + "name" : "终端名称", + "clientId" : "终端ID", + "clientType" : "终端类型", + "latitude" : 纬度, + "longitude" : 经度, + "humidity" : 湿度, + "temperature" : 温度, + "signal" : 信号强度(0~100), + "battery" : 电池电量(0~100), + "alarming" : 是否发生告警(true|false), + "charging" : 是否正在充电(true|false), "clientRecording": 是否正在录像(true|false), "serverRecording": 是否正在录像(true|false), - "lastHeartbeat": "最后心跳时间", - "status": {更多状态}, - "config": {更多配置} + "lastHeartbeat" : "最后心跳时间", + "status" : {更多状态}, + "config" : {更多配置} } """ }, - flow = "终端->信令服务->终端" + flow = "终端=>信令服务->终端" ) public class ClientStatusProtocol extends ProtocolClientAdapter { - public static final String SIGNAL = "client::status"; - - public ClientStatusProtocol() { - super("终端状态信令", SIGNAL); - } + public static final String SIGNAL = "client::status"; + + public ClientStatusProtocol() { + super("终端状态信令", SIGNAL); + } - @Override - public void execute(String clientId, ClientType clientType, Client client, Message message, Map body) { - final String queryClientId = MapUtils.get(body, Constant.CLIENT_ID, clientId); - message.setBody(this.clientManager.getStatus(queryClientId)); - client.push(message); - } - + @Override + public void execute(String clientId, ClientType clientType, Client client, Message message, Map body) { + final String queryClientId = MapUtils.get(body, Constant.CLIENT_ID, clientId); + message.setBody(this.clientManager.getStatus(queryClientId)); + client.push(message); + } + } diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/client/ClientUnicastProtocol.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/client/ClientUnicastProtocol.java index 8f7e5fb..57b784c 100644 --- a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/client/ClientUnicastProtocol.java +++ b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/client/ClientUnicastProtocol.java @@ -35,16 +35,16 @@ import com.acgist.taoyao.signal.protocol.ProtocolClientAdapter; ) public class ClientUnicastProtocol extends ProtocolClientAdapter { - public static final String SIGNAL = "client::unicast"; - - public ClientUnicastProtocol() { - super("终端单播信令", SIGNAL); - } + public static final String SIGNAL = "client::unicast"; + + public ClientUnicastProtocol() { + super("终端单播信令", SIGNAL); + } - @Override - public void execute(String clientId, ClientType clientType, Client client, Message message, Map body) { - final String to = MapUtils.remove(body, Constant.TO); - this.clientManager.unicast(to, message); - } - + @Override + public void execute(String clientId, ClientType clientType, Client client, Message message, Map body) { + final String to = MapUtils.remove(body, Constant.TO); + this.clientManager.unicast(to, message); + } + } diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/client/ClientWakeupProtocol.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/client/ClientWakeupProtocol.java deleted file mode 100644 index ec0418a..0000000 --- a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/client/ClientWakeupProtocol.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.acgist.taoyao.signal.protocol.client; - -import com.acgist.taoyao.boot.annotation.Description; -import com.acgist.taoyao.boot.annotation.Protocol; -import com.acgist.taoyao.signal.protocol.ProtocolClientAdapter; - -/** - * 终端唤醒信令 - * - * @author acgist - */ -@Protocol -@Description( - flow = "信令服务->终端" -) -public class ClientWakeupProtocol extends ProtocolClientAdapter { - - private static final String SIGNAL = "client::wakeup"; - - public ClientWakeupProtocol() { - super("终端唤醒信令", SIGNAL); - } - - /** - * @param clientId 终端ID - */ - public void execute(String clientId) { - this.clientManager.unicast(clientId, this.build()); - } - -} diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/control/ControlBellProtocol.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/control/ControlBellProtocol.java index e9c4379..48abf97 100644 --- a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/control/ControlBellProtocol.java +++ b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/control/ControlBellProtocol.java @@ -19,13 +19,13 @@ import com.acgist.taoyao.signal.protocol.ProtocolControlAdapter; @Description( body = """ { - "to": "目标终端ID", + "to" : "目标终端ID", "enabled": 是否响铃(true|false) } """, flow = { - "信令服务->终端", - "终端->信令服务->终端" + "信令服务=>终端", + "终端=>信令服务->终端" } ) public class ControlBellProtocol extends ProtocolControlAdapter implements IControlBellProtocol { diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/control/ControlWakeupProtocol.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/control/ControlWakeupProtocol.java new file mode 100644 index 0000000..4f15a53 --- /dev/null +++ b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/control/ControlWakeupProtocol.java @@ -0,0 +1,47 @@ +package com.acgist.taoyao.signal.protocol.control; + +import java.util.Map; + +import com.acgist.taoyao.boot.annotation.Description; +import com.acgist.taoyao.boot.annotation.Protocol; +import com.acgist.taoyao.boot.model.Message; +import com.acgist.taoyao.signal.client.Client; +import com.acgist.taoyao.signal.client.ClientType; +import com.acgist.taoyao.signal.protocol.ProtocolControlAdapter; + +/** + * 终端唤醒信令 + * + * @author acgist + */ +@Protocol +@Description( + body = """ + { + "to": "目标终端ID" + } + """, + flow = { + "信令服务=>终端", + "终端=>信令服务->终端" + } +) +public class ControlWakeupProtocol extends ProtocolControlAdapter implements IControlWakeupProtocol { + + private static final String SIGNAL = "control::wakeup"; + + public ControlWakeupProtocol() { + super("终端唤醒信令", SIGNAL); + } + + @Override + public void execute(String clientId, ClientType clientType, Client client, Client targetClient, Message message, Map body) { + client.push(targetClient.request(message)); + } + + @Override + public Message execute(String clientId) { + return this.request(clientId, this.build(Map.of())); + } + +} diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/control/IControlWakeupProtocol.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/control/IControlWakeupProtocol.java new file mode 100644 index 0000000..1dd65af --- /dev/null +++ b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/control/IControlWakeupProtocol.java @@ -0,0 +1,19 @@ +package com.acgist.taoyao.signal.protocol.control; + +import com.acgist.taoyao.boot.model.Message; + +/** + * 终端唤醒信令接口 + * + * @author acgist + */ +public interface IControlWakeupProtocol { + + /** + * @param clientId 终端ID + * + * @return 执行结果 + */ + Message execute(String clientId); + +}