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