diff --git a/.gitmodules b/.gitmodules
index ffb769a..c7786e4 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -9,8 +9,4 @@
[submodule "taoyao-client-android/libmediasoupclient"]
path = taoyao-client-android/libmediasoupclient
url = https://gitee.com/acgist/libmediasoupclient.git
- branch = taoyao
-[submodule "taoyao-client-desktop/libmediasoupclient"]
- path = taoyao-client-desktop/libmediasoupclient
- url = https://gitee.com/acgist/libmediasoupclient.git
branch = taoyao
\ No newline at end of file
diff --git a/docs/Deploy.md b/docs/Deploy.md
index ce1e09c..6075425 100644
--- a/docs/Deploy.md
+++ b/docs/Deploy.md
@@ -202,6 +202,7 @@ vim /usr/libexec/urlgrabber-ext-down
---
## 验证
+yum --version
pip --version
python --version
```
@@ -327,16 +328,15 @@ pm2 start | stop | restart taoyao-client
## 配置防火墙
-### taoyao-media-server
-
-
```
-# 终端
-firewall-cmd --zone=public --add-port=5173/tcp --permanent
-# 信令服务
+# 终端服务:建议使用Nginx代理
+firewall-cmd --zone=public --add-port=8443/tcp --permanent
+# 信令服务(Socket):没有启用不用添加规则
+firewall-cmd --zone=public --add-port=9999/tcp --permanent
+# 信令服务(WebSocket)
firewall-cmd --zone=public --add-port=8888/tcp --permanent
-# 媒体服务(控制):建议关闭
-firewall-cmd --zone=public --add-port=4443/tcp --permanent
+# 媒体服务(控制):只暴露给信令服务
+firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.1.0/24" port protocol="tcp" port="4443" accept"
# 媒体服务(数据)
firewall-cmd --zone=public --add-port=40000-49999/udp --permanent
@@ -344,9 +344,10 @@ firewall-cmd --reload
firewall-cmd --list-ports
# 删除端口
-#firewall-cmd --zone=public --remove-port=5173/udp --permanent
-#firewall-cmd --zone=public --remove-port=8888/udp --permanent
-#firewall-cmd --zone=public --remove-port=4443/tcp --permanent
+#firewall-cmd --zone=public --remove-port=8443/tcp --permanent
+firewall-cmd --permanent --remove-rich-rule="rule family="ipv4" source address="192.168.1.0/24" port protocol="tcp" port="4443" accept"
+#firewall-cmd --zone=public --remove-port=9999/tcp --permanent
+#firewall-cmd --zone=public --remove-port=8888/tcp --permanent
#firewall-cmd --zone=public --remove-port=40000-49999/udp --permanent
```
diff --git a/taoyao-client-desktop/libmediasoupclient b/taoyao-client-desktop/libmediasoupclient
deleted file mode 160000
index 55d724f..0000000
--- a/taoyao-client-desktop/libmediasoupclient
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit 55d724ff8b036991b0f0688adb334df976e458fe
diff --git a/taoyao-media-server/src/Config.js b/taoyao-media-server/src/Config.js
index 5793c49..9058fcc 100644
--- a/taoyao-media-server/src/Config.js
+++ b/taoyao-media-server/src/Config.js
@@ -9,6 +9,7 @@ module.exports = {
version: "1.0.0",
// 交互式命令行
command: true,
+ welcome: `${__dirname}/index.html`,
// 日志级别
logLevel: "DEBUG",
// 信令服务
@@ -144,19 +145,4 @@ module.exports = {
maxSctpMessageSize: 262144,
},
},
- wellcome: `
-
-
-
- 桃夭媒体服务
-
-
-
- taoyao-media-server
- acgist
-
- `,
};
diff --git a/taoyao-media-server/src/Server.js b/taoyao-media-server/src/Server.js
index abc5812..a3b15f6 100644
--- a/taoyao-media-server/src/Server.js
+++ b/taoyao-media-server/src/Server.js
@@ -3,7 +3,7 @@
const fs = require("fs");
const ws = require("ws");
const https = require("https");
-const mediasoup = require("mediasoup");
+// const mediasoup = require("mediasoup");
const config = require("./Config");
const Logger = require("./Logger");
const Signal = require("./Signal");
@@ -80,7 +80,7 @@ async function buildSignalServer() {
// 配置HTTPS
httpsServer = https.createServer(tls, (request, response) => {
response.writeHead(200);
- response.end(config.wellcome);
+ response.end(fs.readFileSync(config.welcome));
});
// 配置WebSocket
webSocketServer = new ws.Server({ server: httpsServer });
@@ -176,9 +176,12 @@ async function buildCommandConsole() {
* 启动方法
*/
async function main() {
- logger.debug("DEBUG").info("INFO").warn("WARN").error("ERROR");
+ logger.debug("闹市早行客");
+ logger.info("江边独钓翁");
+ logger.warn("山中与谁同");
+ logger.error("绿竹细雨风");
logger.info("开始启动", config.name);
- await buildMediasoupWorkers();
+ // await buildMediasoupWorkers();
await buildSignalServer();
await buildClientInterval();
await buildCommandConsole();
diff --git a/taoyao-media-server/src/index.html b/taoyao-media-server/src/index.html
new file mode 100644
index 0000000..bcb89ca
--- /dev/null
+++ b/taoyao-media-server/src/index.html
@@ -0,0 +1,15 @@
+
+
+
+
+ 桃夭媒体服务
+
+
+
+ taoyao-media-server
+ acgist
+
+
\ No newline at end of file
diff --git a/taoyao-signal-server/pom.xml b/taoyao-signal-server/pom.xml
index 7e0677e..8b66543 100644
--- a/taoyao-signal-server/pom.xml
+++ b/taoyao-signal-server/pom.xml
@@ -26,7 +26,6 @@
1.18.26
2.0.2
1.5.2.Final
- 4.4
${project.basedir}
UTF-8
@@ -58,10 +57,6 @@
org.apache.commons
commons-lang3
-
- org.apache.commons
- commons-collections4
-
com.fasterxml.jackson.datatype
@@ -113,12 +108,6 @@
taoyao-server
${project.version}
-
-
- org.apache.commons
- commons-collections4
- ${collections4.version}
-
org.mapstruct
diff --git a/taoyao-signal-server/taoyao-boot/src/main/java/com/acgist/taoyao/boot/annotation/EventListener.java b/taoyao-signal-server/taoyao-boot/src/main/java/com/acgist/taoyao/boot/annotation/EventListener.java
index 8cb8650..b8d7b67 100644
--- a/taoyao-signal-server/taoyao-boot/src/main/java/com/acgist/taoyao/boot/annotation/EventListener.java
+++ b/taoyao-signal-server/taoyao-boot/src/main/java/com/acgist/taoyao/boot/annotation/EventListener.java
@@ -10,6 +10,7 @@ import org.springframework.stereotype.Component;
/**
* 事件监听
+ * 事件用来处理异步业务还有广播业务
*
* @author acgist
*/
diff --git a/taoyao-signal-server/taoyao-boot/src/main/java/com/acgist/taoyao/boot/property/ScriptProperties.java b/taoyao-signal-server/taoyao-boot/src/main/java/com/acgist/taoyao/boot/property/ScriptProperties.java
index 7161edf..44b20da 100644
--- a/taoyao-signal-server/taoyao-boot/src/main/java/com/acgist/taoyao/boot/property/ScriptProperties.java
+++ b/taoyao-signal-server/taoyao-boot/src/main/java/com/acgist/taoyao/boot/property/ScriptProperties.java
@@ -1,87 +1,24 @@
package com.acgist.taoyao.boot.property;
-import java.util.Map;
-
-import org.apache.commons.lang3.ArrayUtils;
import org.springframework.boot.context.properties.ConfigurationProperties;
-import jakarta.annotation.PostConstruct;
import lombok.Getter;
import lombok.Setter;
-import lombok.extern.slf4j.Slf4j;
/**
* 脚本配置
*
* @author acgist
*/
-@Slf4j
@Getter
@Setter
@ConfigurationProperties(prefix = "taoyao.script")
public class ScriptProperties {
/**
- * 系统类型
- *
- * @author acgist
+ * 是否启用
*/
- public enum SystemType {
-
- /**
- * Mac
- */
- MAC("Mac OS", "Mac OS X"),
- /**
- * Linux
- */
- LINUX("Linux"),
- /**
- * Windows
- */
- WINDOWS("Windows XP", "Windows Vista", "Windows 7", "Windows 10", "Windows 11"),
- /**
- * Android
- */
- ANDROID("Android");
-
- /**
- * 系统名称
- */
- private final String[] osNames;
-
- /**
- * @param osNames 系统名称
- */
- private SystemType(String ... osNames) {
- this.osNames = osNames;
- }
-
- /**
- * @param osName 系统名称
- *
- * @return 系统类型
- */
- private static final SystemType of(String osName) {
- final SystemType[] values = SystemType.values();
- for (SystemType value : values) {
- if(ArrayUtils.contains(value.osNames, osName)) {
- return value;
- }
- }
- return SystemType.LINUX;
- }
-
- }
-
- /**
- * Linux脚本
- */
- private Map linux;
- /**
- * Windows脚本
- */
- private Map windows;
+ private Boolean enabled;
/**
* 重启媒体服务
*/
@@ -107,29 +44,4 @@ public class ScriptProperties {
*/
private String platformShutdown;
- @PostConstruct
- public void init() {
- final String osName = System.getProperty("os.name");
- final SystemType type = SystemType.of(osName);
- switch (type) {
- case LINUX -> this.set(this.linux);
- case WINDOWS -> this.set(this.windows);
- default -> log.error("没有配置系统脚本:{}", type);
- }
- }
-
- /**
- * 配置脚本
- *
- * @param map 脚本
- */
- private void set(Map map) {
- this.mediaReboot = map.get("media-reboot");
- this.mediaShutdown = map.get("media-shutdown");
- this.systemReboot = map.get("system-reboot");
- this.systemShutdown = map.get("system-shutdown");
- this.platformReboot = map.get("platform-reboot");
- this.platformShutdown = map.get("platform-shutdown");
- }
-
}
diff --git a/taoyao-signal-server/taoyao-boot/src/main/java/com/acgist/taoyao/boot/property/SocketProperties.java b/taoyao-signal-server/taoyao-boot/src/main/java/com/acgist/taoyao/boot/property/SocketProperties.java
index 9b8e936..e19291c 100644
--- a/taoyao-signal-server/taoyao-boot/src/main/java/com/acgist/taoyao/boot/property/SocketProperties.java
+++ b/taoyao-signal-server/taoyao-boot/src/main/java/com/acgist/taoyao/boot/property/SocketProperties.java
@@ -27,6 +27,10 @@ public class SocketProperties {
* 监听端口
*/
private Integer port;
+ /**
+ * 超时时间
+ */
+ private Integer timeout;
/**
* 线程队列长度
*/
@@ -47,6 +51,9 @@ public class SocketProperties {
* 线程销毁时间
*/
private Integer keepAliveTime;
-
+ /**
+ * 缓冲大小
+ */
+ private Integer bufferSize;
}
diff --git a/taoyao-signal-server/taoyao-boot/src/main/java/com/acgist/taoyao/boot/property/TaoyaoProperties.java b/taoyao-signal-server/taoyao-boot/src/main/java/com/acgist/taoyao/boot/property/TaoyaoProperties.java
index 9afceb6..6160af0 100644
--- a/taoyao-signal-server/taoyao-boot/src/main/java/com/acgist/taoyao/boot/property/TaoyaoProperties.java
+++ b/taoyao-signal-server/taoyao-boot/src/main/java/com/acgist/taoyao/boot/property/TaoyaoProperties.java
@@ -41,10 +41,5 @@ public class TaoyaoProperties {
*/
@Schema(title = "超时时间", description = "超时时间")
private Long timeout;
- /**
- * 最大超时时间
- */
- @Schema(title = "最大超时时间", description = "最大超时时间")
- private Long maxTimeout;
}
diff --git a/taoyao-signal-server/taoyao-boot/src/main/java/com/acgist/taoyao/boot/utils/BeanUtils.java b/taoyao-signal-server/taoyao-boot/src/main/java/com/acgist/taoyao/boot/utils/BeanUtils.java
deleted file mode 100644
index 46b1f3d..0000000
--- a/taoyao-signal-server/taoyao-boot/src/main/java/com/acgist/taoyao/boot/utils/BeanUtils.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package com.acgist.taoyao.boot.utils;
-
-import java.lang.reflect.InvocationTargetException;
-import java.util.Objects;
-
-import lombok.extern.slf4j.Slf4j;
-
-/**
- * Bean工具
- *
- * @author acgist
- */
-@Slf4j
-public final class BeanUtils {
-
- private BeanUtils() {
- }
-
- /**
- * @param 类型
- *
- * @param clazz 类型
- *
- * @return 实例
- */
- public static final T newInstance(Class clazz) {
- Objects.requireNonNull(clazz, "无效类型");
- try {
- return clazz.getDeclaredConstructor().newInstance();
- } catch (InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException | NoSuchMethodException | SecurityException e) {
- log.error("创建类型实例异常:{}", clazz, e);
- }
- return null;
- }
-
-}
diff --git a/taoyao-signal-server/taoyao-boot/src/main/java/com/acgist/taoyao/boot/utils/URLUtils.java b/taoyao-signal-server/taoyao-boot/src/main/java/com/acgist/taoyao/boot/utils/URLUtils.java
deleted file mode 100644
index ac2c169..0000000
--- a/taoyao-signal-server/taoyao-boot/src/main/java/com/acgist/taoyao/boot/utils/URLUtils.java
+++ /dev/null
@@ -1,70 +0,0 @@
-package com.acgist.taoyao.boot.utils;
-
-import java.net.URLDecoder;
-import java.net.URLEncoder;
-import java.nio.charset.StandardCharsets;
-import java.util.Map;
-import java.util.stream.Collectors;
-
-import org.apache.commons.collections4.MapUtils;
-import org.apache.commons.lang3.StringUtils;
-
-/**
- * URL工具
- *
- * @author acgist
- */
-public final class URLUtils {
-
- private URLUtils() {
- }
-
- /**
- * URL编码
- *
- * @param content 原始内容
- *
- * @return 编码内容
- */
- public static final String encode(String content) {
- if (StringUtils.isEmpty(content)) {
- return content;
- }
- return URLEncoder
- .encode(content, StandardCharsets.UTF_8)
- // 空格编码变成加号导致加号解码变成空格
- .replace("+", "%20");
- }
-
- /**
- * URL解码
- *
- * @param content 编码内容
- *
- * @return 原始内容
- */
- public static final String decode(String content) {
- if (StringUtils.isEmpty(content)) {
- return content;
- }
- return URLDecoder.decode(content, StandardCharsets.UTF_8);
- }
-
- /**
- * Map转为URL参数
- *
- * @param map Map
- *
- * @return URL参数
- */
- public static final String toQuery(Map map) {
- if (MapUtils.isEmpty(map)) {
- return null;
- }
- return map.entrySet().stream()
- .filter(entry -> StringUtils.isNotEmpty(entry.getKey()) || StringUtils.isNotEmpty(entry.getValue()))
- .map(entry -> String.join("=", entry.getKey(), URLUtils.encode(entry.getValue())))
- .collect(Collectors.joining("&"));
- }
-
-}
diff --git a/taoyao-signal-server/taoyao-server/src/main/java/com/acgist/taoyao/listener/HTTPClientListener.java b/taoyao-signal-server/taoyao-server/src/main/java/com/acgist/taoyao/listener/HTTPClientListener.java
new file mode 100644
index 0000000..2f0f1bf
--- /dev/null
+++ b/taoyao-signal-server/taoyao-server/src/main/java/com/acgist/taoyao/listener/HTTPClientListener.java
@@ -0,0 +1,22 @@
+package com.acgist.taoyao.listener;
+
+import org.springframework.boot.context.event.ApplicationStartingEvent;
+import org.springframework.context.ApplicationListener;
+
+/**
+ * 配置JDK HTTPClient域名校验问题
+ *
+ * 注意:SpringApplicationRunListeners里面同步执行
+ *
+ * @author acgist
+ */
+public class HTTPClientListener implements ApplicationListener {
+
+ @Override
+ public void onApplicationEvent(ApplicationStartingEvent event) {
+ synchronized (HTTPClientListener.class) {
+ System.getProperties().setProperty("jdk.internal.httpclient.disableHostnameVerification", Boolean.TRUE.toString());
+ }
+ }
+
+}
diff --git a/taoyao-signal-server/taoyao-server/src/main/java/com/acgist/taoyao/main/TaoyaoApplication.java b/taoyao-signal-server/taoyao-server/src/main/java/com/acgist/taoyao/main/TaoyaoApplication.java
index 6646dfa..80f28f7 100644
--- a/taoyao-signal-server/taoyao-server/src/main/java/com/acgist/taoyao/main/TaoyaoApplication.java
+++ b/taoyao-signal-server/taoyao-server/src/main/java/com/acgist/taoyao/main/TaoyaoApplication.java
@@ -9,7 +9,6 @@ import org.springframework.context.annotation.ComponentScan;
public class TaoyaoApplication {
public static void main(String[] args) {
- System.getProperties().setProperty("jdk.internal.httpclient.disableHostnameVerification", Boolean.TRUE.toString());
SpringApplication.run(TaoyaoApplication.class, args);
}
diff --git a/taoyao-signal-server/taoyao-server/src/main/resources/META-INF/spring.factories b/taoyao-signal-server/taoyao-server/src/main/resources/META-INF/spring.factories
new file mode 100644
index 0000000..f4bc38e
--- /dev/null
+++ b/taoyao-signal-server/taoyao-server/src/main/resources/META-INF/spring.factories
@@ -0,0 +1 @@
+org.springframework.context.ApplicationListener=com.acgist.taoyao.listener.HTTPClientListener
\ No newline at end of file
diff --git a/taoyao-signal-server/taoyao-server/src/main/resources/application-win.yml b/taoyao-signal-server/taoyao-server/src/main/resources/application-win.yml
new file mode 100644
index 0000000..51e41a5
--- /dev/null
+++ b/taoyao-signal-server/taoyao-server/src/main/resources/application-win.yml
@@ -0,0 +1,8 @@
+taoyao:
+ script:
+ media-reboot: pm2 restart taoyao-media-server
+ media-shutdown: pm2 stop taoyao-media-server
+ system-reboot: shutdown -s -t 0
+ system-shutdown: shutdown -r -t 0
+ platform-reboot: net stop taoyao-signal-server & net start taoyao-signal-server
+ platform-shutdown: net stop taoyao-signal-server
diff --git a/taoyao-signal-server/taoyao-server/src/main/resources/application.yml b/taoyao-signal-server/taoyao-server/src/main/resources/application.yml
index 90b6498..08a37d4 100644
--- a/taoyao-signal-server/taoyao-server/src/main/resources/application.yml
+++ b/taoyao-signal-server/taoyao-server/src/main/resources/application.yml
@@ -52,7 +52,6 @@ taoyao:
version: 1.0.0
description: 桃夭WebRTC信令服务
timeout: 5000
- max-timeout: 120000
id:
sn: 0
max-index: 999999
@@ -116,11 +115,13 @@ taoyao:
enabled: true
host: 0.0.0.0
port: 9999
+ timeout: ${taoyao.timeout}
queue-size: 100000
thread-min: 4
thread-max: 128
thread-name-prefix: ${spring.application.name}-signal-
keep-alive-time: 60
+ buffer-size: 2048
# WebRTC配置
webrtc:
# STUN服务
@@ -147,19 +148,10 @@ taoyao:
client: 0 * * * * ?
# 脚本配置
script:
- # Linux
- linux:
- media-reboot: pm2 restart taoyao-media-server
- media-shutdown: pm2 stop taoyao-media-server
- system-reboot: reboot
- system-shutdown: shutdown now
- platform-reboot: systemctl restart taoyao-signal-server
- platform-shutdown: systemctl stop taoyao-signal-server
- # Windows
- windows:
- media-reboot: pm2 restart taoyao-media-server
- media-shutdown: pm2 stop taoyao-media-server
- system-reboot: shutdown -s -t 0
- system-shutdown: shutdown -r -t 0
- platform-reboot: net stop taoyao-signal-server & net start taoyao-signal-server
- platform-shutdown: net stop taoyao-signal-server
+ enabled: true
+ media-reboot: pm2 restart taoyao-media-server
+ media-shutdown: pm2 stop taoyao-media-server
+ system-reboot: reboot
+ system-shutdown: shutdown now
+ platform-reboot: systemctl restart taoyao-signal-server
+ platform-shutdown: systemctl stop taoyao-signal-server
diff --git a/taoyao-signal-server/taoyao-server/src/test/java/com/acgist/taoyao/signal/SocketSignalTest.java b/taoyao-signal-server/taoyao-server/src/test/java/com/acgist/taoyao/signal/SocketSignalTest.java
index 8562d75..d0c019d 100644
--- a/taoyao-signal-server/taoyao-server/src/test/java/com/acgist/taoyao/signal/SocketSignalTest.java
+++ b/taoyao-signal-server/taoyao-server/src/test/java/com/acgist/taoyao/signal/SocketSignalTest.java
@@ -1,21 +1,58 @@
package com.acgist.taoyao.signal;
import java.io.IOException;
+import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetSocketAddress;
import java.net.Socket;
-import java.net.UnknownHostException;
+import java.util.concurrent.Executor;
+import java.util.concurrent.Executors;
import org.junit.jupiter.api.Test;
-public class SocketSignalTest {
+import com.acgist.taoyao.signal.protocol.Constant;
+import lombok.extern.slf4j.Slf4j;
+
+@Slf4j
+public class SocketSignalTest {
+
@Test
- void test() throws UnknownHostException, IOException {
+ void testSocket() throws Exception {
final Socket socket = new Socket();
socket.connect(new InetSocketAddress("127.0.0.1", 9999));
final OutputStream outputStream = socket.getOutputStream();
- outputStream.write("{}".getBytes());
+ final InputStream inputStream = socket.getInputStream();
+ final String line = Constant.LINE;
+ final int lineLength = line.length();
+ new Thread(() -> {
+ int index = 0;
+ int length = 0;
+ final byte[] bytes = new byte[1024];
+ final StringBuilder builder = new StringBuilder();
+ try {
+ while((length = inputStream.read(bytes)) >= 0) {
+ builder.append(new String(bytes, 0, length));
+ while((index = builder.indexOf(line)) >= 0) {
+ log.info("收到消息:{}", builder.substring(0, index));
+ builder.delete(0, index + lineLength);
+ }
+ }
+ } catch (IOException e) {
+ log.error("读取异常", e);
+ }
+ }).start();
+ final Executor executor = Executors.newFixedThreadPool(10);
+ for (int index = 0; index < 100; index++) {
+ executor.execute(() -> {
+ try {
+ outputStream.write(("{}" + line).getBytes());
+ } catch (IOException e) {
+ log.error("发送异常", e);
+ }
+ });
+ }
+ Thread.sleep(5000);
socket.close();
}
diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/client/ClientManager.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/client/ClientManager.java
index cd9516b..99e3e15 100644
--- a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/client/ClientManager.java
+++ b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/client/ClientManager.java
@@ -164,6 +164,21 @@ public class ClientManager {
.map(Client::status)
.toList();
}
+
+ /**
+ * 发送消息
+ *
+ * @param instance 会话实例
+ * @param message 消息
+ */
+ public void send(AutoCloseable instance, Message message) {
+ final Client client = this.client(instance);
+ if(client == null) {
+ log.warn("发送消息终端无效:{}-{}", instance, message);
+ return;
+ }
+ client.push(message);
+ }
/**
* 关闭会话
@@ -186,7 +201,7 @@ public class ClientManager {
// 移除管理
this.clients.remove(client);
// 关闭事件
- this.applicationContext.publishEvent(new ClientCloseEvent(client, null));
+ this.applicationContext.publishEvent(new ClientCloseEvent(null, client));
}
}
}
diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/client/socket/SocketAcceptHandler.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/client/socket/SocketAcceptHandler.java
deleted file mode 100644
index ab2ad20..0000000
--- a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/client/socket/SocketAcceptHandler.java
+++ /dev/null
@@ -1,42 +0,0 @@
-package com.acgist.taoyao.signal.client.socket;
-
-import java.nio.channels.AsynchronousServerSocketChannel;
-import java.nio.channels.AsynchronousSocketChannel;
-import java.nio.channels.CompletionHandler;
-
-import com.acgist.taoyao.signal.client.ClientManager;
-import com.acgist.taoyao.signal.protocol.ProtocolManager;
-
-import lombok.extern.slf4j.Slf4j;
-
-/**
- * Socket信令接收
- *
- * @author acgist
- */
-@Slf4j
-public final class SocketAcceptHandler implements CompletionHandler {
-
- private ClientManager clientManager;
- private ProtocolManager protocolManager;
-
- public SocketAcceptHandler(ClientManager clientManager, ProtocolManager protocolManager) {
- this.clientManager = clientManager;
- this.protocolManager = protocolManager;
- }
-
- @Override
- public void completed(AsynchronousSocketChannel channel, AsynchronousServerSocketChannel server) {
- log.debug("Socket信令连接成功:{}", channel);
- this.clientManager.open(new SocketClient(channel));
- final SocketMessageHandler socketMessageHandler = new SocketMessageHandler(this.clientManager, this.protocolManager);
- socketMessageHandler.handle(channel);
- server.accept(server, this);
- }
-
- @Override
- public void failed(Throwable throwable, AsynchronousServerSocketChannel server) {
- log.error("Socket信令连接异常:{}", server, throwable);
- }
-
-}
\ No newline at end of file
diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/client/socket/SocketClient.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/client/socket/SocketClient.java
index 9492178..eed3761 100644
--- a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/client/socket/SocketClient.java
+++ b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/client/socket/SocketClient.java
@@ -1,19 +1,22 @@
package com.acgist.taoyao.signal.client.socket;
+import java.io.IOException;
+import java.net.InetSocketAddress;
import java.nio.ByteBuffer;
import java.nio.channels.AsynchronousSocketChannel;
-import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
+import java.util.concurrent.TimeUnit;
import com.acgist.taoyao.boot.model.Message;
import com.acgist.taoyao.signal.client.ClientAdapter;
+import com.acgist.taoyao.signal.protocol.Constant;
import lombok.Getter;
import lombok.Setter;
import lombok.extern.slf4j.Slf4j;
/**
- * Socket会话
+ * Socket终端
*
* @author acgist
*/
@@ -22,24 +25,49 @@ import lombok.extern.slf4j.Slf4j;
@Setter
public class SocketClient extends ClientAdapter {
- public SocketClient(AsynchronousSocketChannel instance) {
+ /**
+ * 发送超时时间
+ */
+ private final long timeout;
+ /**
+ * 换行符号
+ */
+ private final byte[] line;
+ /**
+ * 换行符号长度
+ */
+ private final int lineLength;
+
+ public SocketClient(Integer timeout, AsynchronousSocketChannel instance) {
super(instance);
+ this.timeout = timeout;
+ this.line = Constant.LINE.getBytes();
+ this.lineLength = this.line.length;
+ try {
+ this.ip = ((InetSocketAddress) instance.getRemoteAddress()).getHostString();
+ } catch (IOException e) {
+ log.error("Socket信令获取远程IP异常", e);
+ }
}
@Override
public void push(Message message) {
try {
synchronized (this.instance) {
+ if(this.instance.isOpen()) {
+ final byte[] bytes = message.toString().getBytes();
+ final ByteBuffer buffer = ByteBuffer.allocateDirect(bytes.length + this.lineLength);
+ buffer.put(bytes);
+ buffer.put(this.line);
+ buffer.flip();
+ final Future future = this.instance.write(buffer);
+ future.get(this.timeout, TimeUnit.MILLISECONDS);
+ } else {
+ log.error("Socket信令已经关闭:{}", this.instance);
+ }
}
- if(this.instance.isOpen()) {
- final Future future = this.instance.write(ByteBuffer.wrap(message.toString().getBytes()));
- future.get();
- // TODO:超时
- } else {
- log.error("会话已经关闭:{}", this.instance);
- }
- } catch (InterruptedException | ExecutionException e) {
- log.error("Socket发送消息异常:{}", message, e);
+ } catch (Exception e) {
+ log.error("Socket信令发送消息异常:{}", message, e);
}
}
diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/client/socket/SocketMessageHandler.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/client/socket/SocketMessageHandler.java
deleted file mode 100644
index 781ee6b..0000000
--- a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/client/socket/SocketMessageHandler.java
+++ /dev/null
@@ -1,76 +0,0 @@
-package com.acgist.taoyao.signal.client.socket;
-
-import java.nio.ByteBuffer;
-import java.nio.channels.AsynchronousSocketChannel;
-import java.nio.channels.CompletionHandler;
-
-import com.acgist.taoyao.boot.utils.CloseableUtils;
-import com.acgist.taoyao.signal.client.ClientManager;
-import com.acgist.taoyao.signal.protocol.ProtocolManager;
-
-import lombok.extern.slf4j.Slf4j;
-
-/**
- * Socket信令消息
- *
- * @author acgist
- */
-@Slf4j
-public final class SocketMessageHandler implements CompletionHandler {
-
- private ClientManager clientManager;
- private ProtocolManager protocolManager;
- private AsynchronousSocketChannel channel;
-
- public SocketMessageHandler(ClientManager clientManager, ProtocolManager protocolManager) {
- this.clientManager = clientManager;
- this.protocolManager = protocolManager;
- }
-
- public void handle(AsynchronousSocketChannel channel) {
- this.channel = channel;
- this.waitMessage();
- }
-
- /**
- * 消息轮询
- */
- private void waitMessage() {
- if(this.channel.isOpen()) {
- final ByteBuffer buffer = ByteBuffer.allocateDirect(2048);
- this.channel.read(buffer, buffer, this);
- } else {
- log.debug("Socket信令消息退出消息轮询");
- }
- }
-
- private void close() {
- CloseableUtils.close(this.channel);
- }
-
- @Override
- public void completed(Integer result, ByteBuffer buffer) {
- if (result == null) {
- this.close();
- } else if(result == -1) {
- // 服务端关闭
- this.close();
- } else if(result == 0) {
- // 消息空轮询
- log.debug("Socket信令消息接收失败(长度):{}", result);
- } else {
- final byte[] bytes = new byte[buffer.remaining()];
- buffer.get(bytes);
- this.protocolManager.execute(new String(bytes), this.channel);
- }
- this.waitMessage();
- }
-
- @Override
- public void failed(Throwable throwable, ByteBuffer buffer) {
- log.error("Socket信令消息处理异常:{}", this.channel, throwable);
- this.close();
- }
-
-
-}
\ No newline at end of file
diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/client/socket/SocketSignal.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/client/socket/SocketSignal.java
index dfed25b..c1226e4 100644
--- a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/client/socket/SocketSignal.java
+++ b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/client/socket/SocketSignal.java
@@ -10,12 +10,13 @@ import java.util.concurrent.ThreadFactory;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
-import com.acgist.taoyao.boot.model.MessageCodeException;
import com.acgist.taoyao.boot.property.SocketProperties;
import com.acgist.taoyao.boot.utils.CloseableUtils;
import com.acgist.taoyao.signal.client.ClientManager;
import com.acgist.taoyao.signal.protocol.ProtocolManager;
+import com.acgist.taoyao.signal.protocol.platform.PlatformErrorProtocol;
+import jakarta.annotation.PreDestroy;
import lombok.extern.slf4j.Slf4j;
/**
@@ -25,22 +26,42 @@ import lombok.extern.slf4j.Slf4j;
*/
@Slf4j
public class SocketSignal {
-
- private int index = 0;
+
private ClientManager clientManager;
- private AsynchronousChannelGroup group;
private ProtocolManager protocolManager;
private SocketProperties socketProperties;
+ private PlatformErrorProtocol platformErrorProtocol;
+
+ /**
+ * 线程序号
+ */
+ private int index = 0;
+ /**
+ * 通道线程池
+ */
+ private AsynchronousChannelGroup group;
+ /**
+ * 服务端通道
+ */
private AsynchronousServerSocketChannel channel;
public SocketSignal(
ClientManager clientManager,
ProtocolManager protocolManager,
- SocketProperties socketProperties
+ SocketProperties socketProperties,
+ PlatformErrorProtocol platformErrorProtocol
) {
this.clientManager = clientManager;
this.protocolManager = protocolManager;
this.socketProperties = socketProperties;
+ this.platformErrorProtocol = platformErrorProtocol;
+ }
+
+ /**
+ * 初始化服务端
+ */
+ public void init() {
+ boolean success = true;
try {
final ExecutorService executor = new ThreadPoolExecutor(
this.socketProperties.getThreadMin(),
@@ -48,11 +69,26 @@ public class SocketSignal {
this.socketProperties.getKeepAliveTime(),
TimeUnit.SECONDS,
new LinkedBlockingQueue<>(this.socketProperties.getQueueSize()),
- newThreadFactory()
+ this.newThreadFactory()
);
this.group = AsynchronousChannelGroup.withThreadPool(executor);
+ this.channel = AsynchronousServerSocketChannel.open(this.group);
+ this.channel.bind(new InetSocketAddress(this.socketProperties.getHost(), this.socketProperties.getPort()));
+ this.channel.accept(this.channel, new SocketSignalAcceptHandler(
+ this.clientManager,
+ this.protocolManager,
+ this.socketProperties,
+ this.platformErrorProtocol
+ ));
} catch (IOException e) {
- throw MessageCodeException.of(e, "创建Socket信令失败");
+ log.error("启动Socket信令服务异常", e);
+ success = false;
+ } finally {
+ if(success) {
+ log.info("启动Socket信令服务:{}-{}", this.socketProperties.getHost(), this.socketProperties.getPort());
+ } else {
+ this.destroy();
+ }
}
}
@@ -74,35 +110,9 @@ public class SocketSignal {
return thread;
};
}
-
- /**
- * 开启监听
- *
- * @return 是否成功
- */
- public boolean listen() {
- boolean success = true;
- try {
- this.channel = AsynchronousServerSocketChannel.open(this.group);
- this.channel.bind(new InetSocketAddress(this.socketProperties.getHost(), this.socketProperties.getPort()));
- this.channel.accept(this.channel, new SocketAcceptHandler(this.clientManager, this.protocolManager));
- } catch (IOException e) {
- log.error("启动Socket信令服务异常", e);
- success = false;
- } finally {
- if(success) {
- log.info("启动Socket信令服务:{}-{}", this.socketProperties.getHost(), this.socketProperties.getPort());
- } else {
- this.shutdown();
- }
- }
- return success;
- }
- /**
- * 关闭Socket信令服务
- */
- public void shutdown() {
+ @PreDestroy
+ public void destroy() {
log.debug("关闭Socket信令服务");
CloseableUtils.close(this.channel);
this.group.shutdown();
diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/client/socket/SocketSignalAcceptHandler.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/client/socket/SocketSignalAcceptHandler.java
new file mode 100644
index 0000000..3250921
--- /dev/null
+++ b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/client/socket/SocketSignalAcceptHandler.java
@@ -0,0 +1,67 @@
+package com.acgist.taoyao.signal.client.socket;
+
+import java.io.IOException;
+import java.net.StandardSocketOptions;
+import java.nio.channels.AsynchronousServerSocketChannel;
+import java.nio.channels.AsynchronousSocketChannel;
+import java.nio.channels.CompletionHandler;
+
+import com.acgist.taoyao.boot.property.SocketProperties;
+import com.acgist.taoyao.signal.client.ClientManager;
+import com.acgist.taoyao.signal.protocol.ProtocolManager;
+import com.acgist.taoyao.signal.protocol.platform.PlatformErrorProtocol;
+
+import lombok.extern.slf4j.Slf4j;
+
+/**
+ * Socket信令接收处理器
+ *
+ * @author acgist
+ */
+@Slf4j
+public final class SocketSignalAcceptHandler implements CompletionHandler {
+
+ private ClientManager clientManager;
+ private ProtocolManager protocolManager;
+ private SocketProperties socketProperties;
+ private PlatformErrorProtocol platformErrorProtocol;
+
+ public SocketSignalAcceptHandler(
+ ClientManager clientManager,
+ ProtocolManager protocolManager,
+ SocketProperties socketProperties,
+ PlatformErrorProtocol platformErrorProtocol
+ ) {
+ this.clientManager = clientManager;
+ this.protocolManager = protocolManager;
+ this.socketProperties = socketProperties;
+ this.platformErrorProtocol = platformErrorProtocol;
+ }
+
+ @Override
+ public void completed(AsynchronousSocketChannel channel, AsynchronousServerSocketChannel server) {
+ try {
+ channel.setOption(StandardSocketOptions.SO_KEEPALIVE, Boolean.TRUE);
+ this.clientManager.open(new SocketClient(this.socketProperties.getTimeout(), channel));
+ final SocketSignalMessageHandler messageHandler = new SocketSignalMessageHandler(
+ this.socketProperties.getBufferSize(),
+ this.clientManager,
+ this.protocolManager,
+ channel,
+ this.platformErrorProtocol
+ );
+ messageHandler.loopMessage();
+ log.debug("Socket信令连接成功:{}", channel);
+ } catch (IOException e) {
+ log.error("Socket信令连接异常", e);
+ } finally {
+ server.accept(server, this);
+ }
+ }
+
+ @Override
+ public void failed(Throwable throwable, AsynchronousServerSocketChannel server) {
+ log.error("Socket信令连接异常:{}", server, throwable);
+ }
+
+}
\ No newline at end of file
diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/client/socket/SocketSignalMessageHandler.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/client/socket/SocketSignalMessageHandler.java
new file mode 100644
index 0000000..4784ead
--- /dev/null
+++ b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/client/socket/SocketSignalMessageHandler.java
@@ -0,0 +1,118 @@
+package com.acgist.taoyao.signal.client.socket;
+
+import java.nio.ByteBuffer;
+import java.nio.channels.AsynchronousSocketChannel;
+import java.nio.channels.CompletionHandler;
+
+import com.acgist.taoyao.boot.utils.CloseableUtils;
+import com.acgist.taoyao.signal.client.ClientManager;
+import com.acgist.taoyao.signal.protocol.Constant;
+import com.acgist.taoyao.signal.protocol.ProtocolManager;
+import com.acgist.taoyao.signal.protocol.platform.PlatformErrorProtocol;
+
+import lombok.extern.slf4j.Slf4j;
+
+/**
+ * Socket信令消息处理器
+ *
+ * @author acgist
+ */
+@Slf4j
+public final class SocketSignalMessageHandler implements CompletionHandler {
+
+ private ClientManager clientManager;
+ private ProtocolManager protocolManager;
+ private AsynchronousSocketChannel channel;
+ private PlatformErrorProtocol platformErrorProtocol;
+
+ /**
+ * 换行符号
+ */
+ private String line;
+ /**
+ * 换行符号长度
+ */
+ private int lineLength;
+ /**
+ * 缓冲大小
+ */
+ private int bufferSize;
+ /**
+ * 消息缓存
+ */
+ private StringBuilder builder;
+
+ public SocketSignalMessageHandler(
+ int bufferSize,
+ ClientManager clientManager,
+ ProtocolManager protocolManager,
+ AsynchronousSocketChannel channel,
+ PlatformErrorProtocol platformErrorProtocol
+ ) {
+ this.line = Constant.LINE;
+ this.lineLength = this.line.length();
+ this.builder = new StringBuilder();
+ this.channel = channel;
+ this.bufferSize = bufferSize;
+ this.clientManager = clientManager;
+ this.protocolManager = protocolManager;
+ this.platformErrorProtocol = platformErrorProtocol;
+ }
+
+ /**
+ * 消息轮询
+ */
+ public void loopMessage() {
+ if(this.channel.isOpen()) {
+ final ByteBuffer buffer = ByteBuffer.allocateDirect(this.bufferSize);
+ this.channel.read(buffer, buffer, this);
+ } else {
+ log.debug("Socket信令退出消息轮询");
+ }
+ }
+
+ /**
+ * 关闭通道
+ */
+ private void close() {
+ CloseableUtils.close(this.channel);
+ }
+
+ @Override
+ public void completed(Integer result, ByteBuffer buffer) {
+ if (result == null) {
+ this.close();
+ } else if(result < 0) {
+ // 服务端关闭
+ this.close();
+ } else if(result == 0) {
+ // 消息空轮询
+ log.debug("Socket信令接收消息失败(长度):{}", result);
+ } else {
+ buffer.flip();
+ final byte[] bytes = new byte[buffer.remaining()];
+ buffer.get(bytes);
+ this.builder.append(new String(bytes));
+ int index = 0;
+ while((index = this.builder.indexOf(this.line)) >= 0) {
+ final String message = this.builder.substring(0, index);
+ this.builder.delete(0, index + this.lineLength);
+ log.debug("Socket信令消息:{}-{}", this.channel, message);
+ try {
+ this.protocolManager.execute(message.strip(), this.channel);
+ } catch (Exception e) {
+ log.error("处理Socket信令消息异常:{}", message, e);
+ this.clientManager.send(this.channel, this.platformErrorProtocol.build(e));
+ }
+ }
+ }
+ this.loopMessage();
+ }
+
+ @Override
+ public void failed(Throwable throwable, ByteBuffer buffer) {
+ log.error("Socket信令异常:{}", this.channel, throwable);
+ this.close();
+ }
+
+}
\ No newline at end of file
diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/client/websocket/WebSocketClient.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/client/websocket/WebSocketClient.java
index ad87da7..9f2097c 100644
--- a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/client/websocket/WebSocketClient.java
+++ b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/client/websocket/WebSocketClient.java
@@ -4,14 +4,13 @@ import com.acgist.taoyao.boot.model.Message;
import com.acgist.taoyao.boot.utils.WebSocketUtils;
import com.acgist.taoyao.signal.client.ClientAdapter;
-import jakarta.websocket.RemoteEndpoint;
import jakarta.websocket.Session;
import lombok.Getter;
import lombok.Setter;
import lombok.extern.slf4j.Slf4j;
/**
- * WebSocket会话
+ * WebSocket终端
*
* @author acgist
*/
@@ -20,15 +19,9 @@ import lombok.extern.slf4j.Slf4j;
@Setter
public class WebSocketClient extends ClientAdapter {
- /**
- * 输出
- */
- private RemoteEndpoint.Basic basic;
-
public WebSocketClient(Session instance) {
super(instance);
this.ip = WebSocketUtils.getRemoteAddress(instance);
- this.basic = instance.getBasicRemote();
}
@Override
@@ -36,12 +29,12 @@ public class WebSocketClient extends ClientAdapter {
synchronized (this.instance) {
try {
if(this.instance.isOpen()) {
- this.basic.sendText(message.toString(), true);
+ this.instance.getBasicRemote().sendText(message.toString(), true);
} else {
- log.error("会话已经关闭:{}", this.instance);
+ log.error("WebSocket信令已经关闭:{}", this.instance);
}
} catch (Exception e) {
- log.error("WebSocket发送消息异常:{}", message, e);
+ log.error("WebSocket信令发送消息异常:{}", message, e);
}
}
}
diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/client/websocket/WebSocketSignal.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/client/websocket/WebSocketSignal.java
index b79f579..5eea685 100644
--- a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/client/websocket/WebSocketSignal.java
+++ b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/client/websocket/WebSocketSignal.java
@@ -2,8 +2,6 @@ package com.acgist.taoyao.signal.client.websocket;
import org.springframework.beans.factory.annotation.Autowired;
-import com.acgist.taoyao.boot.model.Message;
-import com.acgist.taoyao.boot.model.MessageCodeException;
import com.acgist.taoyao.signal.client.ClientManager;
import com.acgist.taoyao.signal.protocol.ProtocolManager;
import com.acgist.taoyao.signal.protocol.platform.PlatformErrorProtocol;
@@ -31,58 +29,33 @@ public class WebSocketSignal {
@OnOpen
public void open(Session session) {
- log.debug("会话连接:{}", session);
+ log.debug("WebSocket信令连接成功:{}", session);
WebSocketSignal.clientManager.open(new WebSocketClient(session));
}
@OnMessage
public void message(Session session, String message) {
- log.debug("会话消息:{}-{}", session, message);
+ log.debug("WebSocket信令消息:{}-{}", session, message);
try {
WebSocketSignal.protocolManager.execute(message.strip(), session);
} catch (Exception e) {
- log.error("处理会话消息异常", e);
- final Message errorMessage = WebSocketSignal.platformErrorProtocol.build();
- if(e instanceof MessageCodeException code) {
- errorMessage.setCode(code.getCode(), code.getMessage());
- }
- errorMessage.setBody(e.getMessage());
- this.push(session, errorMessage);
+ log.error("处理WebSocket信令消息异常:{}", message, e);
+ WebSocketSignal.clientManager.send(session, WebSocketSignal.platformErrorProtocol.build(e));
}
}
@OnClose
public void close(Session session) {
- log.debug("会话关闭:{}", session);
+ log.debug("WebSocket信令关闭:{}", session);
WebSocketSignal.clientManager.close(session);
}
@OnError
public void error(Session session, Throwable e) {
- log.error("会话异常:{}", session, e);
+ log.error("WebSocket信令异常:{}", session, e);
this.close(session);
}
- /**
- * 推送消息
- *
- * @param session 会话
- * @param message 消息
- */
- private void push(Session session, Message message) {
- synchronized (session) {
- try {
- if(session.isOpen()) {
- session.getBasicRemote().sendText(message.toString());
- } else {
- log.error("会话已经关闭:{}", session);
- }
- } catch (Exception e) {
- log.error("推送消息异常:{}", message, e);
- }
- }
- }
-
@Autowired
public void setClientManager(ClientManager clientManager) {
WebSocketSignal.clientManager = clientManager;
diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/config/ScriptAutoConfiguration.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/config/ScriptAutoConfiguration.java
new file mode 100644
index 0000000..f3656e4
--- /dev/null
+++ b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/config/ScriptAutoConfiguration.java
@@ -0,0 +1,67 @@
+package com.acgist.taoyao.signal.config;
+
+import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+import com.acgist.taoyao.signal.protocol.media.MediaRebootProtocol;
+import com.acgist.taoyao.signal.protocol.media.MediaShutdownProtocol;
+import com.acgist.taoyao.signal.protocol.platform.PlatformRebootProtocol;
+import com.acgist.taoyao.signal.protocol.platform.PlatformScriptProtocol;
+import com.acgist.taoyao.signal.protocol.platform.PlatformShutdownProtocol;
+import com.acgist.taoyao.signal.protocol.system.SystemRebootProtocol;
+import com.acgist.taoyao.signal.protocol.system.SystemShutdownProtocol;
+
+/**
+ * 脚本自动配置
+ *
+ * @author acgist
+ */
+@Configuration
+@ConditionalOnProperty(prefix = "taoyao.script", name = "enabled", havingValue = "true", matchIfMissing = true)
+public class ScriptAutoConfiguration {
+
+ @Bean
+ @ConditionalOnMissingBean
+ public MediaRebootProtocol mediaRebootProtocol() {
+ return new MediaRebootProtocol();
+ }
+
+ @Bean
+ @ConditionalOnMissingBean
+ public MediaShutdownProtocol mediaShutdownProtocol() {
+ return new MediaShutdownProtocol();
+ }
+
+ @Bean
+ @ConditionalOnMissingBean
+ public SystemRebootProtocol systemRebootProtocol() {
+ return new SystemRebootProtocol();
+ }
+
+ @Bean
+ @ConditionalOnMissingBean
+ public SystemShutdownProtocol systemShutdownProtocol() {
+ return new SystemShutdownProtocol();
+ }
+
+ @Bean
+ @ConditionalOnMissingBean
+ public PlatformScriptProtocol platformScriptProtocol() {
+ return new PlatformScriptProtocol();
+ }
+
+ @Bean
+ @ConditionalOnMissingBean
+ public PlatformRebootProtocol platformRebootProtocol() {
+ return new PlatformRebootProtocol();
+ }
+
+ @Bean
+ @ConditionalOnMissingBean
+ public PlatformShutdownProtocol platformShutdownProtocol() {
+ return new PlatformShutdownProtocol();
+ }
+
+}
diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/config/SignalAutoConfiguration.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/config/SignalAutoConfiguration.java
index 9110f85..7b5f6a6 100644
--- a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/config/SignalAutoConfiguration.java
+++ b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/config/SignalAutoConfiguration.java
@@ -3,25 +3,13 @@ package com.acgist.taoyao.signal.config;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.config.annotation.EnableWebSocket;
import org.springframework.web.socket.server.standard.ServerEndpointExporter;
-import com.acgist.taoyao.boot.property.SocketProperties;
-import com.acgist.taoyao.signal.client.ClientManager;
-import com.acgist.taoyao.signal.client.socket.SocketSignal;
import com.acgist.taoyao.signal.client.websocket.WebSocketSignal;
import com.acgist.taoyao.signal.media.MediaClientManager;
-import com.acgist.taoyao.signal.protocol.ProtocolManager;
-import com.acgist.taoyao.signal.protocol.media.MediaRebootProtocol;
-import com.acgist.taoyao.signal.protocol.media.MediaShutdownProtocol;
-import com.acgist.taoyao.signal.protocol.platform.PlatformRebootProtocol;
-import com.acgist.taoyao.signal.protocol.platform.PlatformScriptProtocol;
-import com.acgist.taoyao.signal.protocol.platform.PlatformShutdownProtocol;
-import com.acgist.taoyao.signal.protocol.system.SystemRebootProtocol;
-import com.acgist.taoyao.signal.protocol.system.SystemShutdownProtocol;
import com.acgist.taoyao.signal.service.SecurityService;
import com.acgist.taoyao.signal.service.impl.SecurityServiceImpl;
@@ -34,21 +22,12 @@ import com.acgist.taoyao.signal.service.impl.SecurityServiceImpl;
@EnableWebSocket
public class SignalAutoConfiguration {
- @Autowired
- private MediaClientManager mediaClientManager;
-
@Bean
@ConditionalOnMissingBean
public WebSocketSignal webSocketSignal() {
return new WebSocketSignal();
}
- @Bean
- @ConditionalOnMissingBean
- public ServerEndpointExporter serverEndpointExporter() {
- return new ServerEndpointExporter();
- }
-
@Bean
@ConditionalOnMissingBean
public SecurityService securityService() {
@@ -56,88 +35,20 @@ public class SignalAutoConfiguration {
}
@Bean
- public CommandLineRunner mediaCommandLineRunner() {
- return new CommandLineRunner() {
- @Override
- public void run(String ... args) throws Exception {
- SignalAutoConfiguration.this.mediaClientManager.init();
- }
- };
+ @ConditionalOnMissingBean
+ public ServerEndpointExporter serverEndpointExporter() {
+ return new ServerEndpointExporter();
}
@Bean
@Autowired
- @ConditionalOnProperty(prefix = "taoyao.socket", name = "enabled", havingValue = "true", matchIfMissing = true)
- @ConditionalOnMissingBean
- public SocketSignal socketSignal(
- ClientManager clientManager,
- ProtocolManager protocolManager,
- SocketProperties socketProperties
- ) {
- return new SocketSignal(clientManager, protocolManager, socketProperties);
- }
-
- @Bean
- @Autowired
- @ConditionalOnProperty(prefix = "taoyao.socket", name = "enabled", havingValue = "true", matchIfMissing = true)
- public CommandLineRunner socketSignalCommandLineRunner(
- SocketSignal socketSignal
- ) {
+ public CommandLineRunner mediaCommandLineRunner(MediaClientManager mediaClientManager) {
return new CommandLineRunner() {
@Override
public void run(String ... args) throws Exception {
- socketSignal.listen();
+ mediaClientManager.init();
}
};
}
- @Bean
- @ConditionalOnProperty(prefix = "taoyao.script", name = "enabled", havingValue = "true", matchIfMissing = true)
- @ConditionalOnMissingBean
- public MediaRebootProtocol mediaRebootProtocol() {
- return new MediaRebootProtocol();
- }
-
- @Bean
- @ConditionalOnProperty(prefix = "taoyao.script", name = "enabled", havingValue = "true", matchIfMissing = true)
- @ConditionalOnMissingBean
- public MediaShutdownProtocol mediaShutdownProtocol() {
- return new MediaShutdownProtocol();
- }
-
- @Bean
- @ConditionalOnProperty(prefix = "taoyao.script", name = "enabled", havingValue = "true", matchIfMissing = true)
- @ConditionalOnMissingBean
- public SystemRebootProtocol systemRebootProtocol() {
- return new SystemRebootProtocol();
- }
-
- @Bean
- @ConditionalOnProperty(prefix = "taoyao.script", name = "enabled", havingValue = "true", matchIfMissing = true)
- @ConditionalOnMissingBean
- public SystemShutdownProtocol systemShutdownProtocol() {
- return new SystemShutdownProtocol();
- }
-
- @Bean
- @ConditionalOnProperty(prefix = "taoyao.script", name = "enabled", havingValue = "true", matchIfMissing = true)
- @ConditionalOnMissingBean
- public PlatformRebootProtocol platformRebootProtocol() {
- return new PlatformRebootProtocol();
- }
-
- @Bean
- @ConditionalOnProperty(prefix = "taoyao.script", name = "enabled", havingValue = "true", matchIfMissing = true)
- @ConditionalOnMissingBean
- public PlatformScriptProtocol platformScriptProtocol() {
- return new PlatformScriptProtocol();
- }
-
- @Bean
- @ConditionalOnProperty(prefix = "taoyao.script", name = "enabled", havingValue = "true", matchIfMissing = true)
- @ConditionalOnMissingBean
- public PlatformShutdownProtocol platformShutdownProtocol() {
- return new PlatformShutdownProtocol();
- }
-
}
diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/config/SocketAutoConfigruation.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/config/SocketAutoConfigruation.java
new file mode 100644
index 0000000..1030d22
--- /dev/null
+++ b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/config/SocketAutoConfigruation.java
@@ -0,0 +1,50 @@
+package com.acgist.taoyao.signal.config;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.CommandLineRunner;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+import com.acgist.taoyao.boot.property.SocketProperties;
+import com.acgist.taoyao.signal.client.ClientManager;
+import com.acgist.taoyao.signal.client.socket.SocketSignal;
+import com.acgist.taoyao.signal.protocol.ProtocolManager;
+import com.acgist.taoyao.signal.protocol.platform.PlatformErrorProtocol;
+
+/**
+ * Socket信令自动配置
+ *
+ * @author acgist
+ */
+@Configuration
+@ConditionalOnProperty(prefix = "taoyao.socket", name = "enabled", havingValue = "true", matchIfMissing = true)
+public class SocketAutoConfigruation {
+
+ @Bean
+ @Autowired
+ @ConditionalOnMissingBean
+ public SocketSignal socketSignal(
+ ClientManager clientManager,
+ ProtocolManager protocolManager,
+ SocketProperties socketProperties,
+ PlatformErrorProtocol platformErrorProtocol
+ ) {
+ return new SocketSignal(clientManager, protocolManager, socketProperties, platformErrorProtocol);
+ }
+
+ @Bean
+ @Autowired
+ @ConditionalOnBean(SocketSignal.class)
+ public CommandLineRunner socketSignalCommandLineRunner(SocketSignal socketSignal) {
+ return new CommandLineRunner() {
+ @Override
+ public void run(String ... args) throws Exception {
+ socketSignal.init();
+ }
+ };
+ }
+
+}
diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/event/ApplicationEventAdapter.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/event/ApplicationEventAdapter.java
index 46d1e71..91dc40c 100644
--- a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/event/ApplicationEventAdapter.java
+++ b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/event/ApplicationEventAdapter.java
@@ -6,7 +6,6 @@ import org.springframework.context.ApplicationEvent;
import com.acgist.taoyao.boot.model.Message;
import com.acgist.taoyao.signal.MapBodyGetter;
-import com.acgist.taoyao.signal.client.Client;
import lombok.Getter;
import lombok.Setter;
@@ -18,65 +17,51 @@ import lombok.Setter;
*/
@Getter
@Setter
-public abstract class ApplicationEventAdapter extends ApplicationEvent implements MapBodyGetter {
-
- private static final long serialVersionUID = 1L;
+public class ApplicationEventAdapter extends ApplicationEvent implements MapBodyGetter {
- /**
- * 终端标识
- */
- private String sn;
- /**
- * 主体
- */
- private final Map, ?> body;
- /**
- * 终端
- */
- private final Client client;
- /**
- * 消息
- */
- private final Message message;
-
- public ApplicationEventAdapter(Client client, Message message) {
- this(null, client, message);
- }
-
- public ApplicationEventAdapter(Map, ?> body, Client client, Message message) {
- super(client);
- this.sn = client.sn();
- this.body = body;
- this.client = client;
- this.message = message;
- }
-
- /**
- * @see #get(Map, String)
- */
- public T get(String key) {
- return this.get(this.body, key);
- }
+ private static final long serialVersionUID = 1L;
- /**
- * @see #get(Map, String, Object)
- */
- public T get(String key, T defaultValue) {
- return this.get(body, key, defaultValue);
- }
-
- /**
- * @see #getLong(Map, String)
- */
- public Long getLong(String key) {
- return this.getLong(body, key);
- }
-
- /**
- * @see #getInteger(Map, String)
- */
- public Integer getInteger(String key) {
- return this.getInteger(body, key);
- }
+ /**
+ * 主体
+ */
+ private final Map, ?> body;
+ /**
+ * 消息
+ */
+ private final Message message;
+
+ protected ApplicationEventAdapter(Map, ?> body, Message message, Object source) {
+ super(source);
+ this.body = body;
+ this.message = message;
+ }
+
+ /**
+ * @see #get(Map, String)
+ */
+ public T get(String key) {
+ return this.get(this.body, key);
+ }
+
+ /**
+ * @see #get(Map, String, Object)
+ */
+ public T get(String key, T defaultValue) {
+ return this.get(body, key, defaultValue);
+ }
+
+ /**
+ * @see #getLong(Map, String)
+ */
+ public Long getLong(String key) {
+ return this.getLong(body, key);
+ }
+
+ /**
+ * @see #getInteger(Map, String)
+ */
+ public Integer getInteger(String key) {
+ return this.getInteger(body, key);
+ }
}
diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/event/ClientEventAdapter.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/event/ClientEventAdapter.java
new file mode 100644
index 0000000..a51e57b
--- /dev/null
+++ b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/event/ClientEventAdapter.java
@@ -0,0 +1,41 @@
+package com.acgist.taoyao.signal.event;
+
+import java.util.Map;
+
+import com.acgist.taoyao.boot.model.Message;
+import com.acgist.taoyao.signal.client.Client;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 终端事件适配器
+ *
+ * @author acgist
+ */
+@Getter
+@Setter
+public abstract class ClientEventAdapter extends ApplicationEventAdapter {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 终端标识
+ */
+ private String sn;
+ /**
+ * 终端
+ */
+ private final Client client;
+
+ public ClientEventAdapter(Message message, Client client) {
+ this(Map.of(), message, client);
+ }
+
+ public ClientEventAdapter(Map, ?> body, Message message, Client client) {
+ super(body, message, client);
+ this.sn = client.sn();
+ this.client = client;
+ }
+
+}
diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/event/MediaEventAdapter.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/event/MediaEventAdapter.java
new file mode 100644
index 0000000..b67b58f
--- /dev/null
+++ b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/event/MediaEventAdapter.java
@@ -0,0 +1,36 @@
+package com.acgist.taoyao.signal.event;
+
+import java.util.Map;
+
+import com.acgist.taoyao.boot.model.Message;
+import com.acgist.taoyao.signal.media.MediaClient;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 媒体事件适配器
+ *
+ * @author acgist
+ */
+@Getter
+@Setter
+public class MediaEventAdapter extends ApplicationEventAdapter {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 终端
+ */
+ private final MediaClient mediaClient;
+
+ public MediaEventAdapter(Message message, MediaClient mediaClient) {
+ this(Map.of(), message, mediaClient);
+ }
+
+ public MediaEventAdapter(Map, ?> body, Message message, MediaClient mediaClient) {
+ super(body, message, mediaClient);
+ this.mediaClient = mediaClient;
+ }
+
+}
diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/event/client/ClientCloseEvent.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/event/client/ClientCloseEvent.java
index 081740a..3ceed9a 100644
--- a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/event/client/ClientCloseEvent.java
+++ b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/event/client/ClientCloseEvent.java
@@ -2,7 +2,7 @@ package com.acgist.taoyao.signal.event.client;
import com.acgist.taoyao.boot.model.Message;
import com.acgist.taoyao.signal.client.Client;
-import com.acgist.taoyao.signal.event.ApplicationEventAdapter;
+import com.acgist.taoyao.signal.event.ClientEventAdapter;
import lombok.Getter;
import lombok.Setter;
@@ -14,12 +14,12 @@ import lombok.Setter;
*/
@Getter
@Setter
-public class ClientCloseEvent extends ApplicationEventAdapter {
+public class ClientCloseEvent extends ClientEventAdapter {
private static final long serialVersionUID = 1L;
- public ClientCloseEvent(Client client, Message message) {
- super(client, message);
+ public ClientCloseEvent(Message message, Client client) {
+ super(message, client);
}
}
diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/event/client/ClientRegisterEvent.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/event/client/ClientRegisterEvent.java
index 485b766..5ca2edc 100644
--- a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/event/client/ClientRegisterEvent.java
+++ b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/event/client/ClientRegisterEvent.java
@@ -4,7 +4,7 @@ import java.util.Map;
import com.acgist.taoyao.boot.model.Message;
import com.acgist.taoyao.signal.client.Client;
-import com.acgist.taoyao.signal.event.ApplicationEventAdapter;
+import com.acgist.taoyao.signal.event.ClientEventAdapter;
import com.acgist.taoyao.signal.protocol.Constant;
import lombok.Getter;
@@ -17,12 +17,12 @@ import lombok.Setter;
*/
@Getter
@Setter
-public class ClientRegisterEvent extends ApplicationEventAdapter {
+public class ClientRegisterEvent extends ClientEventAdapter {
private static final long serialVersionUID = 1L;
- public ClientRegisterEvent(Map, ?> body, Client client, Message message) {
- super(body, client, message);
+ public ClientRegisterEvent(Map, ?> body, Message message, Client client) {
+ super(body, message, client);
}
/**
diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/event/media/MediaRegisterEvent.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/event/media/MediaRegisterEvent.java
new file mode 100644
index 0000000..b22f01e
--- /dev/null
+++ b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/event/media/MediaRegisterEvent.java
@@ -0,0 +1,12 @@
+package com.acgist.taoyao.signal.event.media;
+
+/**
+ * 媒体服务注册事件
+ *
+ * TODO:成功以后注册已有房间
+ *
+ * @author acgist
+ */
+public class MediaRegisterEvent {
+
+}
diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/event/platform/PlatformScriptEvent.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/event/platform/PlatformScriptEvent.java
index e554302..ce23334 100644
--- a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/event/platform/PlatformScriptEvent.java
+++ b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/event/platform/PlatformScriptEvent.java
@@ -4,7 +4,7 @@ import java.util.Map;
import com.acgist.taoyao.boot.model.Message;
import com.acgist.taoyao.signal.client.Client;
-import com.acgist.taoyao.signal.event.ApplicationEventAdapter;
+import com.acgist.taoyao.signal.event.ClientEventAdapter;
import com.acgist.taoyao.signal.protocol.Constant;
import lombok.Getter;
@@ -17,16 +17,16 @@ import lombok.Setter;
*/
@Getter
@Setter
-public class PlatformScriptEvent extends ApplicationEventAdapter {
+public class PlatformScriptEvent extends ClientEventAdapter {
private static final long serialVersionUID = 1L;
- public PlatformScriptEvent(String script, Client client, Message message) {
- this(Map.of(Constant.SCRIPT, script), client, message);
+ public PlatformScriptEvent(String script, Message message, Client client) {
+ this(Map.of(Constant.SCRIPT, script), message, client);
}
- public PlatformScriptEvent(Map, ?> body, Client client, Message message) {
- super(body, client, message);
+ public PlatformScriptEvent(Map, ?> body, Message message, Client client) {
+ super(body, message, client);
}
/**
diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/event/platform/PlatformShutdownEvent.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/event/platform/PlatformShutdownEvent.java
index 2bf6021..5867808 100644
--- a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/event/platform/PlatformShutdownEvent.java
+++ b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/event/platform/PlatformShutdownEvent.java
@@ -2,7 +2,7 @@ package com.acgist.taoyao.signal.event.platform;
import com.acgist.taoyao.boot.model.Message;
import com.acgist.taoyao.signal.client.Client;
-import com.acgist.taoyao.signal.event.ApplicationEventAdapter;
+import com.acgist.taoyao.signal.event.ClientEventAdapter;
import lombok.Getter;
import lombok.Setter;
@@ -14,12 +14,12 @@ import lombok.Setter;
*/
@Getter
@Setter
-public class PlatformShutdownEvent extends ApplicationEventAdapter {
+public class PlatformShutdownEvent extends ClientEventAdapter {
private static final long serialVersionUID = 1L;
- public PlatformShutdownEvent(Client client, Message message) {
- super(client, message);
+ public PlatformShutdownEvent(Message message, Client client) {
+ super(message, client);
}
}
diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/event/room/RoomCreateEvent.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/event/room/RoomCreateEvent.java
index 76a8921..34b15fa 100644
--- a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/event/room/RoomCreateEvent.java
+++ b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/event/room/RoomCreateEvent.java
@@ -4,7 +4,7 @@ import java.util.Map;
import com.acgist.taoyao.boot.model.Message;
import com.acgist.taoyao.signal.client.Client;
-import com.acgist.taoyao.signal.event.ApplicationEventAdapter;
+import com.acgist.taoyao.signal.event.ClientEventAdapter;
import com.acgist.taoyao.signal.protocol.Constant;
import lombok.Getter;
@@ -17,12 +17,12 @@ import lombok.Setter;
*/
@Getter
@Setter
-public class RoomCreateEvent extends ApplicationEventAdapter {
+public class RoomCreateEvent extends ClientEventAdapter {
private static final long serialVersionUID = 1L;
- public RoomCreateEvent(Map, ?> body, Client client, Message message) {
- super(body, client, message);
+ public RoomCreateEvent(Map, ?> body, Message message, Client client) {
+ super(body, message, client);
}
/**
diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/event/room/RoomEnterEvent.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/event/room/RoomEnterEvent.java
index 60cb5d8..34848ad 100644
--- a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/event/room/RoomEnterEvent.java
+++ b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/event/room/RoomEnterEvent.java
@@ -4,7 +4,7 @@ import java.util.Map;
import com.acgist.taoyao.boot.model.Message;
import com.acgist.taoyao.signal.client.Client;
-import com.acgist.taoyao.signal.event.ApplicationEventAdapter;
+import com.acgist.taoyao.signal.event.ClientEventAdapter;
import com.acgist.taoyao.signal.protocol.Constant;
import lombok.Getter;
@@ -17,12 +17,12 @@ import lombok.Setter;
*/
@Getter
@Setter
-public class RoomEnterEvent extends ApplicationEventAdapter {
+public class RoomEnterEvent extends ClientEventAdapter {
private static final long serialVersionUID = 1L;
- public RoomEnterEvent(Map, ?> body, Client client, Message message) {
- super(body, client, message);
+ public RoomEnterEvent(Map, ?> body, Message message, Client client) {
+ super(body, message, client);
}
/**
diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/listener/ApplicationListenerAdapter.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/listener/ApplicationListenerAdapter.java
index 2d41ebd..5445edd 100644
--- a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/listener/ApplicationListenerAdapter.java
+++ b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/listener/ApplicationListenerAdapter.java
@@ -5,7 +5,7 @@ import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationListener;
import com.acgist.taoyao.signal.client.ClientManager;
-import com.acgist.taoyao.signal.event.ApplicationEventAdapter;
+import com.acgist.taoyao.signal.event.ClientEventAdapter;
import com.acgist.taoyao.signal.media.MediaClientManager;
import com.acgist.taoyao.signal.media.RoomManager;
@@ -16,7 +16,7 @@ import com.acgist.taoyao.signal.media.RoomManager;
*
* @author acgist
*/
-public abstract class ApplicationListenerAdapter implements ApplicationListener {
+public abstract class ApplicationListenerAdapter implements ApplicationListener {
@Autowired
protected RoomManager roomManager;
diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/listener/platform/PlatformScriptListener.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/listener/platform/PlatformScriptListener.java
index db7dc7d..1adb615 100644
--- a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/listener/platform/PlatformScriptListener.java
+++ b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/listener/platform/PlatformScriptListener.java
@@ -8,6 +8,8 @@ import org.springframework.scheduling.annotation.Async;
import com.acgist.taoyao.boot.annotation.EventListener;
import com.acgist.taoyao.boot.model.Message;
+import com.acgist.taoyao.boot.model.MessageCode;
+import com.acgist.taoyao.boot.model.MessageCodeException;
import com.acgist.taoyao.signal.client.Client;
import com.acgist.taoyao.signal.event.platform.PlatformScriptEvent;
import com.acgist.taoyao.signal.listener.ApplicationListenerAdapter;
@@ -46,8 +48,7 @@ public class PlatformScriptListener extends ApplicationListenerAdapter void publishEvent(E event);
+ void publishEvent(E event);
/**
* 创建信令消息
diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/ProtocolAdapter.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/ProtocolAdapter.java
index 416614a..0161609 100644
--- a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/ProtocolAdapter.java
+++ b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/ProtocolAdapter.java
@@ -10,7 +10,7 @@ import com.acgist.taoyao.boot.model.MessageCode;
import com.acgist.taoyao.boot.property.TaoyaoProperties;
import com.acgist.taoyao.boot.service.IdService;
import com.acgist.taoyao.signal.client.ClientManager;
-import com.acgist.taoyao.signal.event.ApplicationEventAdapter;
+import com.acgist.taoyao.signal.event.ClientEventAdapter;
import com.acgist.taoyao.signal.media.MediaClientManager;
import com.acgist.taoyao.signal.media.RoomManager;
@@ -59,7 +59,7 @@ public abstract class ProtocolAdapter implements Protocol {
}
@Override
- public void publishEvent(E event) {
+ public void publishEvent(E event) {
this.applicationContext.publishEvent(event);
}
diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/client/ClientRegisterProtocol.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/client/ClientRegisterProtocol.java
index d5f7a22..e71c1f1 100644
--- a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/client/ClientRegisterProtocol.java
+++ b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/client/ClientRegisterProtocol.java
@@ -49,7 +49,7 @@ public class ClientRegisterProtocol extends ProtocolMapAdapter {
// 推送消息
client.push(message.cloneWidthoutBody());
// 发送事件
- this.publishEvent(new ClientRegisterEvent(body, client, message));
+ this.publishEvent(new ClientRegisterEvent(body, message, client));
}
}
diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/media/MediaRebootProtocol.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/media/MediaRebootProtocol.java
index 037dc87..6f23a0d 100644
--- a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/media/MediaRebootProtocol.java
+++ b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/media/MediaRebootProtocol.java
@@ -33,7 +33,7 @@ public class MediaRebootProtocol extends ProtocolAdapter {
// 全员广播
this.clientManager.broadcast(message);
// 推送事件
- this.publishEvent(new PlatformScriptEvent(this.scriptProperties.getMediaReboot(), client, message));
+ this.publishEvent(new PlatformScriptEvent(this.scriptProperties.getMediaReboot(), message, client));
}
}
diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/platform/PlatformErrorProtocol.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/platform/PlatformErrorProtocol.java
index a684c9c..dfb610f 100644
--- a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/platform/PlatformErrorProtocol.java
+++ b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/platform/PlatformErrorProtocol.java
@@ -3,6 +3,7 @@ package com.acgist.taoyao.signal.protocol.platform;
import com.acgist.taoyao.boot.annotation.Protocol;
import com.acgist.taoyao.boot.model.Message;
import com.acgist.taoyao.boot.model.MessageCode;
+import com.acgist.taoyao.boot.model.MessageCodeException;
import com.acgist.taoyao.signal.client.Client;
import com.acgist.taoyao.signal.protocol.ProtocolAdapter;
@@ -35,6 +36,20 @@ public class PlatformErrorProtocol extends ProtocolAdapter {
@Override
public void execute(String sn, Client client, Message message) {
}
+
+ /**
+ * @param e 异常
+ *
+ * @return 异常消息
+ */
+ public Message build(Exception e) {
+ final Message message = super.build();
+ if(e instanceof MessageCodeException code) {
+ message.setCode(code.getCode(), code.getMessage());
+ }
+ message.setBody(e.getMessage());
+ return message;
+ }
@Override
public Message build(String id, MessageCode code, String message, Object body) {
diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/platform/PlatformRebootProtocol.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/platform/PlatformRebootProtocol.java
index 9ce0e95..e323fe4 100644
--- a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/platform/PlatformRebootProtocol.java
+++ b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/platform/PlatformRebootProtocol.java
@@ -33,7 +33,7 @@ public class PlatformRebootProtocol extends ProtocolAdapter {
// 全员广播
this.clientManager.broadcast(message);
// 推送事件
- this.publishEvent(new PlatformScriptEvent(this.scriptProperties.getPlatformReboot(), client, message));
+ this.publishEvent(new PlatformScriptEvent(this.scriptProperties.getPlatformReboot(), message, client));
}
}
\ No newline at end of file
diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/platform/PlatformScriptProtocol.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/platform/PlatformScriptProtocol.java
index 5949056..b18dda3 100644
--- a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/platform/PlatformScriptProtocol.java
+++ b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/platform/PlatformScriptProtocol.java
@@ -22,7 +22,7 @@ public class PlatformScriptProtocol extends ProtocolMapAdapter {
@Override
public void execute(String sn, Map, ?> body, Client client, Message message) {
- this.publishEvent(new PlatformScriptEvent(body, client, message));
+ this.publishEvent(new PlatformScriptEvent(body, message, client));
}
}
diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/platform/PlatformShutdownProtocol.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/platform/PlatformShutdownProtocol.java
index a299bac..e84525d 100644
--- a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/platform/PlatformShutdownProtocol.java
+++ b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/platform/PlatformShutdownProtocol.java
@@ -27,7 +27,7 @@ public class PlatformShutdownProtocol extends ProtocolAdapter {
// 全员广播
this.clientManager.broadcast(message);
// 推送事件
- this.publishEvent(new PlatformShutdownEvent(client, message));
+ this.publishEvent(new PlatformShutdownEvent(message, client));
}
}
diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/room/RoomCreateProtocol.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/room/RoomCreateProtocol.java
index aed0c77..d4c24c3 100644
--- a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/room/RoomCreateProtocol.java
+++ b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/room/RoomCreateProtocol.java
@@ -24,7 +24,7 @@ public class RoomCreateProtocol extends ProtocolMapAdapter {
@Override
public void execute(String sn, Map, ?> body, Client client, Message message) {
- this.publishEvent(new RoomCreateEvent(body, client, message));
+ this.publishEvent(new RoomCreateEvent(body, message, client));
}
}
diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/room/RoomEnterProtocol.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/room/RoomEnterProtocol.java
index 5f54931..6954deb 100644
--- a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/room/RoomEnterProtocol.java
+++ b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/room/RoomEnterProtocol.java
@@ -24,7 +24,7 @@ public class RoomEnterProtocol extends ProtocolMapAdapter {
@Override
public void execute(String sn, Map, ?> body, Client client, Message message) {
- this.publishEvent(new RoomEnterEvent(body, client, message));
+ this.publishEvent(new RoomEnterEvent(body, message, client));
}
}
diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/system/SystemRebootProtocol.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/system/SystemRebootProtocol.java
index 862e880..571c28e 100644
--- a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/system/SystemRebootProtocol.java
+++ b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/system/SystemRebootProtocol.java
@@ -31,7 +31,7 @@ public class SystemRebootProtocol extends ProtocolAdapter {
public void execute(String sn, Client client, Message message) {
log.info("重启系统:{}", sn);
this.clientManager.broadcast(message);
- this.publishEvent(new PlatformScriptEvent(this.scriptProperties.getSystemReboot(), client, message));
+ this.publishEvent(new PlatformScriptEvent(this.scriptProperties.getSystemReboot(), message, client));
}
}
diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/system/SystemShutdownProtocol.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/system/SystemShutdownProtocol.java
index 79f4c63..03e3ac1 100644
--- a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/system/SystemShutdownProtocol.java
+++ b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/system/SystemShutdownProtocol.java
@@ -31,7 +31,7 @@ public class SystemShutdownProtocol extends ProtocolAdapter {
public void execute(String sn, Client client, Message message) {
log.info("关闭系统:{}", sn);
this.clientManager.broadcast(message);
- this.publishEvent(new PlatformScriptEvent(this.scriptProperties.getSystemShutdown(), client, message));
+ this.publishEvent(new PlatformScriptEvent(this.scriptProperties.getSystemShutdown(), message, client));
}
}
diff --git a/taoyao-signal-server/taoyao-signal/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/taoyao-signal-server/taoyao-signal/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
index 31e8ad0..07f6f51 100644
--- a/taoyao-signal-server/taoyao-signal/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
+++ b/taoyao-signal-server/taoyao-signal/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
@@ -1 +1,3 @@
+com.acgist.taoyao.signal.config.ScriptAutoConfiguration
com.acgist.taoyao.signal.config.SignalAutoConfiguration
+com.acgist.taoyao.signal.config.SocketAutoConfigruation