From 79c840444827e2e7fea5b71176149122505f86a4 Mon Sep 17 00:00:00 2001
From: root <295172551@qq.com>
Date: Sun, 15 Jun 2025 02:58:04 +0800
Subject: [PATCH] =?UTF-8?q?ws=20=E8=A7=A3=E6=9E=90=E6=95=B0=E6=8D=AE=20?=
=?UTF-8?q?=E8=BD=AC=E5=AE=9A=E4=B9=89=E5=AD=97=E7=AC=A6?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../Helpers/LinuxWsResponseParser.cs | 69 +++++++++++++++++++
CoreAgent.Domain/Models/System/AppSettings.cs | 5 ++
.../Command/Executors/LinuxCommandExecutor.cs | 8 +--
3 files changed, 76 insertions(+), 6 deletions(-)
create mode 100644 CoreAgent.Domain/Helpers/LinuxWsResponseParser.cs
diff --git a/CoreAgent.Domain/Helpers/LinuxWsResponseParser.cs b/CoreAgent.Domain/Helpers/LinuxWsResponseParser.cs
new file mode 100644
index 0000000..a437b47
--- /dev/null
+++ b/CoreAgent.Domain/Helpers/LinuxWsResponseParser.cs
@@ -0,0 +1,69 @@
+using System.Text.RegularExpressions;
+
+namespace CoreAgent.Domain.Helpers;
+
+///
+/// Linux WebSocket响应日志解析器
+///
+public static class LinuxWsResponseParser
+{
+ private static readonly Regex _regexWs = new Regex(@"\{(?:[^{}]*|\{(?:[^{}]*|\{[^{}]*\})*\})*\}");
+
+ ///
+ /// 解析Linux WebSocket响应日志
+ ///
+ /// 输入日志字符串
+ /// 解析后的日志内容
+ public static string ParseWsResultLogs(this string input)
+ {
+ try
+ {
+ return GetContentBetweenOuterCurlyBraces(input);
+ }
+ catch (Exception ex)
+ {
+ string msg = ex.Message;
+ return "Parse Logs Data Is null";
+ }
+ }
+
+ private static string GetContentBetweenOuterCurlyBraces(string input)
+ {
+ int openBraceIndex = input.IndexOf('{');
+ if (openBraceIndex == -1)
+ {
+ return string.Empty; // 没有找到'{'
+ }
+
+ int closeBraceIndex = FindMatchingCloseBrace(input, openBraceIndex);
+ if (closeBraceIndex == -1)
+ {
+ return string.Empty; // 没有找到匹配的'}'
+ }
+
+ // 提取并返回内容
+ return input.Substring(openBraceIndex, closeBraceIndex - openBraceIndex + 1);
+ }
+
+ private static int FindMatchingCloseBrace(string input, int openBraceIndex)
+ {
+ int braceDepth = 1; // 从第一个'{'开始,深度为1
+ for (int i = openBraceIndex + 1; i < input.Length; i++)
+ {
+ if (input[i] == '{')
+ {
+ braceDepth++; // 遇到'{',深度增加
+ }
+ else if (input[i] == '}')
+ {
+ braceDepth--; // 遇到'}',深度减少
+ if (braceDepth == 0)
+ {
+ return i; // 找到匹配的'}',返回其索引
+ }
+ }
+ }
+
+ return -1; // 没有找到匹配的'}'
+ }
+}
\ No newline at end of file
diff --git a/CoreAgent.Domain/Models/System/AppSettings.cs b/CoreAgent.Domain/Models/System/AppSettings.cs
index 86c9c54..43ac941 100644
--- a/CoreAgent.Domain/Models/System/AppSettings.cs
+++ b/CoreAgent.Domain/Models/System/AppSettings.cs
@@ -19,4 +19,9 @@ public class AppSettings
/// MME配置目录路径
///
public string MmeConfigDirectory { get; set; } = "/root/mme/config/";
+
+ ///
+ /// WebSocket JavaScript文件路径
+ ///
+ public string WebSocketJsPath { get; set; } = "/root/enb/doc/ws.js";
}
\ No newline at end of file
diff --git a/CoreAgent.Infrastructure/Command/Executors/LinuxCommandExecutor.cs b/CoreAgent.Infrastructure/Command/Executors/LinuxCommandExecutor.cs
index 4939a23..5dc9b30 100644
--- a/CoreAgent.Infrastructure/Command/Executors/LinuxCommandExecutor.cs
+++ b/CoreAgent.Infrastructure/Command/Executors/LinuxCommandExecutor.cs
@@ -91,12 +91,8 @@ public class LinuxCommandExecutor : BaseCommandExecutor
throw new ArgumentException("命令不能为空", nameof(command));
}
- // 使用双引号包裹整个命令,只对必要的特殊字符进行转义
- var escapedCommand = command
- .Replace("\"", "\\\"")
- .Replace("`", "\\`")
- .Replace("\\", "\\\\");
-
+ // 使用双引号包裹整个命令,只对双引号进行转义
+ var escapedCommand = command.Replace("\"", "\\\"");
return $"-c \"{escapedCommand}\"";
}
}
\ No newline at end of file