Jelajahi Sumber

1. 修改脚本解析默认参数传两个
2. 修改反射解析默认参数传两个

Shun 2 tahun lalu
induk
melakukan
0869fecd94

+ 6 - 1
README.md

@@ -493,4 +493,9 @@ while(true)
 #### 2023-11-24
 1. 整体框架调整 Core、Model、Extend、Daq、Relay
 2. 实现底层数据转发功能支持热加载热更新
-3. 优化数据解析流程,优化转发流程
+3. 优化数据解析流程,优化转发流程
+
+#### 2023-11-27
+1. 优化数据结构
+2. 测试底层转发流程(成功)
+3. 版本更新

+ 2 - 2
src/YSAI.Core/YSAI.Core.csproj

@@ -3,7 +3,7 @@
     <TargetFrameworks>net6.0;net8.0</TargetFrameworks>
     <ImplicitUsings>enable</ImplicitUsings>
     <Nullable>enable</Nullable>
-    <Version>23.331.28670</Version>
+    <Version>23.331.36455</Version>
     <PackageOutputPath Condition="'$(Configuration)' == 'Release'">../YSAI.Publish/Release</PackageOutputPath>
     <PackageOutputPath Condition="'$(Configuration)' == 'Debug'">../YSAI.Publish/Debug</PackageOutputPath>
     <Authors>Shun</Authors>
@@ -17,7 +17,7 @@
   </PropertyGroup>
   <ItemGroup>
     <PackageReference Include="System.IO.Ports" Version="8.0.0" />
-    <PackageReference Include="YSAI.Model" Version="23.331.28193" />
+    <PackageReference Include="YSAI.Model" Version="23.331.36088" />
     <PackageReference Include="Microsoft.ClearScript" Version="7.4.4" />
   </ItemGroup>
 </Project>

+ 2 - 2
src/YSAI.Core/handler/AddressHandler.cs

@@ -153,7 +153,7 @@ namespace YSAI.Core.handler
                                 }
                                 if (ReflectionIoc.ContainsKey(rb))
                                 {
-                                    NewValue = ReflectionIoc[rb].ExecuteMethod(addressDetails.AddressParseParam?.ReflectionParseParam?.RSn, new object[] { value })?.ToString();
+                                    NewValue = ReflectionIoc[rb].ExecuteMethod(addressDetails.AddressParseParam?.ReflectionParseParam?.RSn, new object[] { addressDetails.AddressName, value })?.ToString();
                                 }
                             }
                             else
@@ -173,7 +173,7 @@ namespace YSAI.Core.handler
                                 }
                                 if (ScriptIoc.ContainsKey(sb))
                                 {
-                                    OperateResult operateResult = ScriptIoc[sb].Execute(sb.ScriptType, sb.ScriptCode, sb.ScriptFunction, value);
+                                    OperateResult operateResult = ScriptIoc[sb].Execute(sb.ScriptType, sb.ScriptCode, sb.ScriptFunction, new object[] { addressDetails.AddressName, value });
                                     if (operateResult.State)
                                     {
                                         NewValue = operateResult.RData?.ToString();

+ 12 - 9
src/YSAI.Core/script/ScriptOperate.cs

@@ -67,6 +67,9 @@ namespace YSAI.Core.script
         /// </summary>
         private ScriptData.Basics basics;
 
+        /// <summary>
+        /// 释放
+        /// </summary>
         public void Dispose()
         {
             GC.Collect();
@@ -79,7 +82,7 @@ namespace YSAI.Core.script
         /// </summary>
         /// <param name="ScriptParam">脚本参数</param>
         /// <returns>统一出参</returns>
-        public OperateResult Execute(string ScriptParam)
+        public OperateResult Execute(object[]? ScriptParam)
         {
             return Execute(basics.ScriptType, basics.ScriptCode, basics.ScriptFunction, ScriptParam);
         }
@@ -89,7 +92,7 @@ namespace YSAI.Core.script
         /// </summary>
         /// <param name="ScriptParam">脚本参数</param>
         /// <returns>统一出参</returns>
-        public Task<OperateResult> ExecuteAsync(string ScriptParam)
+        public Task<OperateResult> ExecuteAsync(object[]? ScriptParam)
         {
             return Task.Run(() => Execute(ScriptParam));
         }
@@ -100,11 +103,11 @@ namespace YSAI.Core.script
         /// <param name="ScriptType">脚本类型</param>
         /// <param name="ScriptCode">脚本代码</param>
         /// <param name="ScriptFunction">脚本函数</param>
-        /// <param name="ScriptParam">脚本参数,脚本方法入口参数只能为一个,多参数用分隔符区分</param>
+        /// <param name="ScriptParam">脚本参数</param>
         /// <returns>统一出参</returns>
-        public OperateResult Execute(ScriptData.ScriptType ScriptType, string? ScriptCode, string? ScriptFunction, string? ScriptParam)
+        public OperateResult Execute(ScriptData.ScriptType ScriptType, string? ScriptCode, string? ScriptFunction, object[]? ScriptParam)
         {
-            Depart("Execute");
+            string SN = Depart("Execute");
             try
             {
                 //返回参数
@@ -122,11 +125,11 @@ namespace YSAI.Core.script
                         }
                         break;
                 }
-                return Break("Execute", true, RData: RetParam, RType: ResultType.String);
+                return Break(SN, true, RData: RetParam, RType: ResultType.String);
             }
             catch (Exception ex)
             {
-                return Break("Execute", false, ex.Message, Exception: ex);
+                return Break(SN, false, ex.Message, Exception: ex);
             }
         }
 
@@ -136,9 +139,9 @@ namespace YSAI.Core.script
         /// <param name="ScriptType">脚本类型</param>
         /// <param name="ScriptCode">脚本代码</param>
         /// <param name="ScriptFunction">脚本函数</param>
-        /// <param name="ScriptParam">脚本参数,脚本方法入口参数只能为一个,多参数用分隔符区分</param>
+        /// <param name="ScriptParam">脚本参数</param>
         /// <returns>统一出参</returns>
-        public Task<OperateResult> ExecuteAsync(ScriptData.ScriptType ScriptType, string ScriptCode, string ScriptFunction, string ScriptParam)
+        public Task<OperateResult> ExecuteAsync(ScriptData.ScriptType ScriptType, string ScriptCode, string ScriptFunction, object[]? ScriptParam)
         {
             return Task.Run(() => Execute(ScriptType, ScriptCode, ScriptFunction, ScriptParam));
         }

+ 8 - 1
src/YSAI.DAQ.sln

@@ -135,7 +135,9 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "YSAI.Redis", "YSAI.Redis\YS
 EndProject
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "YSAI.Model", "YSAI.Model\YSAI.Model.csproj", "{2E999BFE-9128-4BAD-9BB5-88C20295BE61}"
 EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "YSAI.Rest", "YSAI.Rest\YSAI.Rest.csproj", "{6A818E8C-144C-46E7-8C66-B66CD85487C0}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "YSAI.Rest", "YSAI.Rest\YSAI.Rest.csproj", "{6A818E8C-144C-46E7-8C66-B66CD85487C0}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "YSAI.Test.Dll", "YSAI.Test.Dll\YSAI.Test.Dll.csproj", "{AB1B080B-FAA1-44F9-927E-1BB3DD658012}"
 EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -371,6 +373,10 @@ Global
 		{6A818E8C-144C-46E7-8C66-B66CD85487C0}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{6A818E8C-144C-46E7-8C66-B66CD85487C0}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{6A818E8C-144C-46E7-8C66-B66CD85487C0}.Release|Any CPU.Build.0 = Release|Any CPU
+		{AB1B080B-FAA1-44F9-927E-1BB3DD658012}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{AB1B080B-FAA1-44F9-927E-1BB3DD658012}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{AB1B080B-FAA1-44F9-927E-1BB3DD658012}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{AB1B080B-FAA1-44F9-927E-1BB3DD658012}.Release|Any CPU.Build.0 = Release|Any CPU
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE
@@ -438,6 +444,7 @@ Global
 		{F917D5C2-A067-47F3-8E18-1CD2C95FEC29} = {F23C3553-3FE7-4ECC-9BBA-8C498C3B4398}
 		{2E999BFE-9128-4BAD-9BB5-88C20295BE61} = {D60224CF-7F12-453B-851E-B5C01F9D2BBE}
 		{6A818E8C-144C-46E7-8C66-B66CD85487C0} = {9D8EDBBA-7A97-4D84-9B12-7FCC2F834046}
+		{AB1B080B-FAA1-44F9-927E-1BB3DD658012} = {12CB0510-7B1E-4518-AA3B-412A4D323D42}
 	EndGlobalSection
 	GlobalSection(ExtensibilityGlobals) = postSolution
 		SolutionGuid = {5D5D3927-6714-40C0-84EA-44C5BA4C5E87}

+ 1 - 1
src/YSAI.Kafka/YSAI.Kafka.csproj

@@ -17,6 +17,6 @@
   </PropertyGroup>
   <ItemGroup>
     <PackageReference Include="Confluent.Kafka" Version="2.3.0" />
-    <PackageReference Include="YSAI.Model" Version="23.331.28193" />
+    <PackageReference Include="YSAI.Model" Version="23.331.36088" />
   </ItemGroup>
 </Project>

+ 1 - 1
src/YSAI.Model/YSAI.Model.csproj

@@ -3,7 +3,7 @@
     <TargetFrameworks>net6.0;net8.0</TargetFrameworks>
     <ImplicitUsings>enable</ImplicitUsings>
     <Nullable>enable</Nullable>
-    <Version>23.331.28193</Version>
+    <Version>23.331.36088</Version>
     <PackageOutputPath Condition="'$(Configuration)' == 'Release'">../YSAI.Publish/Release</PackageOutputPath>
     <PackageOutputPath Condition="'$(Configuration)' == 'Debug'">../YSAI.Publish/Debug</PackageOutputPath>
     <Authors>Shun</Authors>

+ 2 - 2
src/YSAI.Model/enum/ParseType.cs

@@ -6,12 +6,12 @@
     public enum ParseType
     {
         /// <summary>
-        /// 反射解析,通过反射得到,代码中定义的具体方法解析[入参string][出参string]
+        /// 反射解析,通过反射得到,[入参(string 地址名,string 地址值)] - [出参(string)]
         /// </summary>
         R,
 
         /// <summary>
-        /// 脚本解析,动态脚本解析[入参string][出参string]
+        /// 脚本解析,动态脚本解析[入参(string 地址名,string 地址值)] - [出参(string)]
         /// </summary>
         S
     }

+ 1 - 1
src/YSAI.Mqtt/YSAI.Mqtt.csproj

@@ -18,6 +18,6 @@
   <ItemGroup>
     <PackageReference Include="MQTTnet" Version="4.3.1.873" />
     <PackageReference Include="MQTTnet.AspNetCore" Version="4.3.1.873" />
-    <PackageReference Include="YSAI.Model" Version="23.331.28193" />
+    <PackageReference Include="YSAI.Model" Version="23.331.36088" />
   </ItemGroup>
 </Project>

+ 1 - 1
src/YSAI.NetMQ/YSAI.NetMQ.csproj

@@ -18,6 +18,6 @@
   </PropertyGroup>
   <ItemGroup>
     <PackageReference Include="NetMQ" Version="4.0.1.13" />
-    <PackageReference Include="YSAI.Model" Version="23.331.28193" />
+    <PackageReference Include="YSAI.Model" Version="23.331.36088" />
   </ItemGroup>
 </Project>

+ 1 - 1
src/YSAI.Netty/YSAI.Netty.csproj

@@ -18,6 +18,6 @@
   <ItemGroup>
     <PackageReference Include="DotNetty.Handlers" Version="0.7.5" />
     <PackageReference Include="DotNetty.Transport" Version="0.7.5" />
-    <PackageReference Include="YSAI.Model" Version="23.331.28193" />
+    <PackageReference Include="YSAI.Model" Version="23.331.36088" />
   </ItemGroup>
 </Project>

+ 1 - 1
src/YSAI.RabbitMQ/YSAI.RabbitMQ.csproj

@@ -17,6 +17,6 @@
   </PropertyGroup>
   <ItemGroup>
     <PackageReference Include="RabbitMQ.Client" Version="6.7.0" />
-    <PackageReference Include="YSAI.Model" Version="23.331.28193" />
+    <PackageReference Include="YSAI.Model" Version="23.331.36088" />
   </ItemGroup>
 </Project>

+ 1 - 1
src/YSAI.Redis/YSAI.Redis.csproj

@@ -17,6 +17,6 @@
   </PropertyGroup>
   <ItemGroup>
     <PackageReference Include="StackExchange.Redis" Version="2.7.4" />
-    <PackageReference Include="YSAI.Model" Version="23.331.28193" />
+    <PackageReference Include="YSAI.Model" Version="23.331.36088" />
   </ItemGroup>
 </Project>

+ 1 - 1
src/YSAI.Rest/YSAI.Rest.csproj

@@ -17,6 +17,6 @@
 	</PropertyGroup>
 	<ItemGroup>
 		<PackageReference Include="RabbitMQ.Client" Version="6.7.0" />
-		<PackageReference Include="YSAI.Model" Version="23.331.28193" />
+		<PackageReference Include="YSAI.Model" Version="23.331.36088" />
 	</ItemGroup>
 </Project>

+ 1 - 1
src/YSAI.Rpc/YSAI.Rpc.csproj

@@ -18,6 +18,6 @@
   <ItemGroup>
     <PackageReference Include="DotNetty.Codecs" Version="0.7.5" />
     <PackageReference Include="ImpromptuInterface" Version="8.0.4" />
-    <PackageReference Include="YSAI.Model" Version="23.331.28193" />
+    <PackageReference Include="YSAI.Model" Version="23.331.36088" />
   </ItemGroup>
 </Project>

+ 94 - 10
src/YSAI.Test.All/Program.cs

@@ -1,4 +1,6 @@
 using System.Collections.Concurrent;
+using YSAI.Core.reflection;
+using YSAI.Core.script;
 using YSAI.Log;
 using YSAI.Model.data;
 using YSAI.Model.@enum;
@@ -39,23 +41,105 @@ address.SN = Guid.NewGuid().ToString();
 address.CreationTime = DateTime.Now;
 address.AddressArray = new List<AddressDetails>();
 List<string> strings = ReadCsv("C:\\Users\\Shun\\Desktop\\6022.csv", true);
-foreach (var item in strings)
+for (int i = 0; i < strings.Count; i++)
 {
-    string[] str = item.Split(",");
+    string[] str = strings[i].Split(",");
     string addressD = str[0].Replace("\"", "");
-    address.AddressArray.Add(new AddressDetails()
+    if (i % 2 == 0)
     {
-        AddressName = $"ns=2;s=6022.6022.{addressD}",
-        SN = Guid.NewGuid().ToString(),
+        address.AddressArray.Add(new AddressDetails()
+        {
+            AddressName = $"ns=2;s=6022.6022.{addressD}",
+            SN = Guid.NewGuid().ToString(),
 
-        AddressRelayParam = new AddressRelay
+            AddressRelayParam = new AddressRelay
+            {
+                ISns = new List<string> { "YSAI.Mqtt.client.MqttClientOperate.mqtt1", "YSAI.Mqtt.client.MqttClientOperate.mqtt2" },
+                Topic = $"TEST/{addressD}"
+            },
+            AddressParseParam = new AddressParse
+            {
+                ParseType = ParseType.S,
+                ScriptBasics = new ScriptData.Basics()
+                {
+                    ScriptCode = @"function Convert(addressname,value) { return '【这是调用脚本解析】传入的地址是:'+ addressname + '----传入的参数是:' + value; }",
+                    ScriptFunction = "Convert",
+                    ScriptType = ScriptData.ScriptType.JavaScript
+                }
+            }
+        });
+    }
+    else
+    {
+        address.AddressArray.Add(new AddressDetails()
         {
-            ISns = new List<string> { "YSAI.Mqtt.client.MqttClientOperate.mqtt1", "YSAI.Mqtt.client.MqttClientOperate.mqtt2" },
-            Topic = $"TEST/{addressD}"
-        }
-    });
+            AddressName = $"ns=2;s=6022.6022.{addressD}",
+            SN = Guid.NewGuid().ToString(),
+
+            AddressRelayParam = new AddressRelay
+            {
+                ISns = new List<string> { "YSAI.Mqtt.client.MqttClientOperate.mqtt1", "YSAI.Mqtt.client.MqttClientOperate.mqtt2" },
+                Topic = $"TEST/{addressD}"
+            },
+            AddressParseParam = new AddressParse
+            {
+                ParseType = ParseType.R,
+                ReflectionParseParam = new ReflectionParse()
+                {
+                    ReflectionBasics = new ReflectionData.Basics
+                    {
+                        DllDatas = new List<ReflectionData.Basics.DllData>
+                        {
+                            new ReflectionData.Basics.DllData
+                            {
+                                DllPath="lib\\YSAI.Test.Dll.dll",
+                                IsAbsolutePath=false,
+                                NamespaceDatas=new List<ReflectionData.Basics.DllData.NamespaceData>
+                                {
+                                    new ReflectionData.Basics.DllData.NamespaceData
+                                    {
+                                        Namespace="YSAI.Test.Dll",
+                                        ClassDatas=new List<ReflectionData.Basics.DllData.NamespaceData.ClassData>
+                                        {
+                                            new ReflectionData.Basics.DllData.NamespaceData.ClassData
+                                            {
+                                                ClassName="TestAll",
+                                                SN="YSAI.Test.Dll.TestAll[Instance]",
+                                                MethodDatas=new List<ReflectionData.Basics.DllData.NamespaceData.ClassData.MethodData>
+                                                {
+                                                    new ReflectionData.Basics.DllData.NamespaceData.ClassData.MethodData
+                                                    {
+                                                        MethodName="R1",
+                                                        SN="[R1]"
+                                                    },
+                                                     new ReflectionData.Basics.DllData.NamespaceData.ClassData.MethodData
+                                                    {
+                                                        MethodName="R2",
+                                                        SN="[R2]"
+                                                    },
+                                                      new ReflectionData.Basics.DllData.NamespaceData.ClassData.MethodData
+                                                    {
+                                                        MethodName="R3",
+                                                        SN="[R3]"
+                                                    }
+                                                }
+                                            }
+                                        }
+                                    }
+                                }
+
+                            }
+                        }
+                    },
+                    RSn = "YSAI.Test.Dll.TestAll[Instance][R1]"
+                }
+            }
+        });
+    }
 }
 
+File.WriteAllText("config\\config.json", address.ToJson().JsonFormatting());
+
 OpcUaClientOperate opcUaClientOperate = OpcUaClientOperate.Instance(new OpcUaClientData.Basics
 {
     ServerUrl = "opc.tcp://192.168.2.220:49320",

+ 18 - 0
src/YSAI.Test.Dll/TestAll.cs

@@ -0,0 +1,18 @@
+namespace YSAI.Test.Dll
+{
+    public class TestAll
+    {
+        public string R1(string addressname, string value)
+        {
+            return $"【这是调用反射动态库解析】传入的地址是:{addressname}----传入的参数是:{value} - R1";
+        }
+        public string R2(string addressname, string value)
+        {
+            return $"【这是调用反射动态库解析】传入的地址是:{addressname}----传入的参数是:{value} - R2";
+        }
+        public string R3(string addressname, string value)
+        {
+            return $"【这是调用反射动态库解析】传入的地址是:{addressname}----传入的参数是:{value} - R3";
+        }
+    }
+}

+ 9 - 0
src/YSAI.Test.Dll/YSAI.Test.Dll.csproj

@@ -0,0 +1,9 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <TargetFramework>net8.0</TargetFramework>
+    <ImplicitUsings>enable</ImplicitUsings>
+    <Nullable>enable</Nullable>
+  </PropertyGroup>
+
+</Project>

+ 1 - 1
src/YSAI.VT/Program.cs

@@ -20,7 +20,7 @@ namespace YSAI.VT
 
                 //"YSAI.Model",
 
-                //"YSAI.Core",
+                "YSAI.Core",
 
                 //"YSAI.Rpc",
                 //"YSAI.Redis",