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