From f6c6674113dcafae7b52e4628ce3f21ab7e13506 Mon Sep 17 00:00:00 2001
From: acgist <289547414@qq.com>
Date: Sun, 20 Nov 2022 09:13:32 +0800
Subject: [PATCH] [*] script
---
pom.xml | 14 ++++------
taoyao-boot/pom.xml | 5 ++++
.../acgist/taoyao/boot/utils/ErrorUtils.java | 6 ++--
taoyao-signal/README.md | 8 +++++-
.../listener/platform/ScriptListener.java | 28 +++++++++++++++----
5 files changed, 42 insertions(+), 19 deletions(-)
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;
}
}