diff --git a/pom.xml b/pom.xml index 3e66dcc..ddbc793 100644 --- a/pom.xml +++ b/pom.xml @@ -73,10 +73,6 @@ commons-collections4 - - com.fasterxml.jackson.core - jackson-databind - com.fasterxml.jackson.datatype jackson-datatype-jsr310 @@ -111,6 +107,11 @@ + + com.acgist + taoyao-test + ${project.version} + com.acgist taoyao-boot @@ -121,11 +122,6 @@ taoyao-live ${project.version} - - com.acgist - taoyao-test - ${project.version} - com.acgist taoyao-media diff --git a/taoyao-boot/pom.xml b/taoyao-boot/pom.xml index a1db1e0..2a9513c 100644 --- a/taoyao-boot/pom.xml +++ b/taoyao-boot/pom.xml @@ -22,6 +22,11 @@ spring-boot-starter-web true + + org.springframework.boot + spring-boot-starter-websocket + true + \ No newline at end of file diff --git a/taoyao-boot/src/main/java/com/acgist/taoyao/boot/utils/ErrorUtils.java b/taoyao-boot/src/main/java/com/acgist/taoyao/boot/utils/ErrorUtils.java index 7e7b4dd..071beb1 100644 --- a/taoyao-boot/src/main/java/com/acgist/taoyao/boot/utils/ErrorUtils.java +++ b/taoyao-boot/src/main/java/com/acgist/taoyao/boot/utils/ErrorUtils.java @@ -29,6 +29,9 @@ import lombok.extern.slf4j.Slf4j; @Slf4j public final class ErrorUtils { + private ErrorUtils() { + } + /** * 异常映射 */ @@ -54,9 +57,6 @@ public final class ErrorUtils { * SpringBoot异常 */ public static final String EXCEPTION_SPRINGBOOT = "org.springframework.boot.web.servlet.error.DefaultErrorAttributes.ERROR"; - - private ErrorUtils() { - } /** * 注册异常(注意继承顺序) diff --git a/taoyao-signal/README.md b/taoyao-signal/README.md index 549dbe4..cc9e626 100644 --- a/taoyao-signal/README.md +++ b/taoyao-signal/README.md @@ -43,14 +43,20 @@ ### 执行命令信令(1001) -终端->服务端:执行系统命令 +#### 消息主体 ``` { "script": "命令" } +---- +{ + "result": "结果" +} ``` +#### 消息流程:终端->服务端->终端 + ### 异常信令(1999) 服务端->终端:提示异常信息 diff --git a/taoyao-signal/src/main/java/com/acgist/taoyao/signal/listener/platform/ScriptListener.java b/taoyao-signal/src/main/java/com/acgist/taoyao/signal/listener/platform/ScriptListener.java index 6040a1b..d06eab7 100644 --- a/taoyao-signal/src/main/java/com/acgist/taoyao/signal/listener/platform/ScriptListener.java +++ b/taoyao-signal/src/main/java/com/acgist/taoyao/signal/listener/platform/ScriptListener.java @@ -1,11 +1,14 @@ package com.acgist.taoyao.signal.listener.platform; import java.io.InputStream; +import java.util.Map; import org.apache.commons.lang3.StringUtils; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Component; +import com.acgist.taoyao.boot.model.Message; +import com.acgist.taoyao.signal.client.ClientSession; import com.acgist.taoyao.signal.event.platform.ScriptEvent; import com.acgist.taoyao.signal.listener.ApplicationListenerAdapter; @@ -23,21 +26,29 @@ public class ScriptListener extends ApplicationListenerAdapter { @Async @Override public void onApplicationEvent(ScriptEvent event) { - final String script = (String) event.getBody().get("script"); + final Message message = event.getMessage(); + final ClientSession session = event.getSession(); + final Map body = event.getBody(); + final String script = (String) body.get("script"); log.debug("执行命令:{}", script); - this.execute(script); + final String result = this.execute(script); + message.setBody(Map.of("result", result)); + session.push(message); } /** * 执行命令 * * @param script 命令 + * + * @return 执行结果 */ - private void execute(String script) { + private String execute(String script) { if(StringUtils.isEmpty(script)) { log.warn("执行命令失败:{}", script); - return; + return "命令为空"; } + String result = null; Process process = null; try { process = Runtime.getRuntime().exec(script); @@ -45,22 +56,27 @@ public class ScriptListener extends ApplicationListenerAdapter { final InputStream input = process.getInputStream(); final InputStream error = process.getErrorStream(); ) { + final String inputValue = new String(input.readAllBytes()); + final String errorValue = new String(input.readAllBytes()); log.info(""" 执行命令:{} 执行结果:{} 失败结果:{} - """, script, new String(input.readAllBytes()), new String(error.readAllBytes())); + """, script, inputValue, errorValue); + result = StringUtils.isEmpty(inputValue) ? errorValue : inputValue; } catch (Exception e) { log.error("命令执行异常:{}", script, e); + result = e.getMessage(); } } catch (Exception e) { log.error("执行命令异常:{}", script, e); + result = e.getMessage(); } finally { if(process != null) { process.destroy(); -// process.destroyForcibly(); } } + return result; } }