From 29f2be5c8086aaf3940e6b528333a4fa5ea0cc3d Mon Sep 17 00:00:00 2001
From: fengjiayi <12821976+ning_xi@user.noreply.gitee.com>
Date: Sat, 26 Jul 2025 19:36:54 +0800
Subject: [PATCH] =?UTF-8?q?=E9=80=9A=E8=BF=87Emit=E4=BC=98=E5=8C=96Script?=
=?UTF-8?q?=E8=84=9A=E6=9C=AC=E7=9A=84=E8=A7=A3=E9=87=8A=E6=89=A7=E8=A1=8C?=
=?UTF-8?q?=EF=BC=9B=E5=87=BA=E4=BA=8E=E5=90=8E=E6=9C=9F=E6=9B=B4=E6=96=B0?=
=?UTF-8?q?=E7=9A=84=E6=96=B9=E5=90=91=EF=BC=8C=E6=9A=82=E6=97=B6=E9=9A=90?=
=?UTF-8?q?=E8=97=8F=E8=A1=A8=E8=BE=BE=E5=BC=8F=E8=8A=82=E7=82=B9=E3=80=81?=
=?UTF-8?q?=E6=9D=A1=E4=BB=B6=E8=A1=A8=E8=BE=BE=E5=BC=8F=E8=8A=82=E7=82=B9?=
=?UTF-8?q?=E3=80=81=E5=85=A8=E5=B1=80=E6=95=B0=E6=8D=AE=E8=8A=82=E7=82=B9?=
=?UTF-8?q?=EF=BC=9B=E6=B5=81=E7=A8=8B=E5=9B=BE=E8=BD=ACc#=E4=BB=A3?=
=?UTF-8?q?=E7=A0=81=E6=96=B0=E5=A2=9E=E5=AF=B9=E4=BA=8EScript=E8=84=9A?=
=?UTF-8?q?=E6=9C=AC=E7=9A=84=E6=94=AF=E6=8C=81=EF=BC=8CScript=E8=84=9A?=
=?UTF-8?q?=E6=9C=AC=E7=8E=B0=E5=9C=A8=E5=8F=AF=E4=BB=A5=E5=8E=9F=E7=94=9F?=
=?UTF-8?q?=E5=AF=BC=E5=87=BA=E4=B8=BAC#=E4=BB=A3=E7=A0=81=E3=80=82?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
Library/Extension/FlowModelExtension.cs | 2 +-
Library/FlowNode/DelegateDetails.cs | 239 +++++++--
Library/FlowNode/ParameterDetails.cs | 25 +-
Library/Network/Modbus/HexExtensions.cs | 17 +
Library/Network/Modbus/IModbusClient.cs | 61 +++
Library/Network/Modbus/ModbusClientFactory.cs | 119 +++++
Library/Network/Modbus/ModbusException.cs | 35 ++
Library/Network/Modbus/ModbusRequest.cs | 25 +
Library/Network/Modbus/ModbusRtuClient.cs | 323 ++++++++++++
Library/Network/Modbus/ModbusRtuRequest.cs | 19 +
Library/Network/Modbus/ModbusTcpClient.cs | 51 +-
Library/Network/Modbus/ModbusTcpRequest.cs | 26 +-
Library/Network/Modbus/ModbusUdpClient.cs | 260 ++++++++++
Library/Serein.Library.csproj | 3 +-
Library/Utils/EmitHelper.cs | 307 +++++++++++-
.../SereinExpression/SereinConditionParser.cs | 119 +++--
NodeFlow/Model/Node/NodeModelBaseFunc.cs | 51 +-
NodeFlow/Model/Node/SingleScriptNode.cs | 76 ++-
NodeFlow/Serein.NodeFlow.csproj | 1 +
NodeFlow/Services/FlowCoreGenerateService.cs | 460 +++++++++++++++---
README.md | 74 ---
Serein.Script/SereinSciptException.cs | 17 -
Serein.Script/SereinSciptParserException.cs | 32 ++
Serein.Script/SereinScript.cs | 10 +-
Serein.Script/SereinScriptInterpreter.cs | 155 ++++--
Serein.Script/SereinScriptMethodInfo.cs | 22 +
Serein.Script/SereinScriptToCsharpScript.cs | 51 +-
Workbench/Node/View/ActionNodeControl.xaml.cs | 4 -
Workbench/Node/View/ScriptNodeControl.xaml | 1 +
.../ViewModel/ScriptNodeControlViewModel.cs | 14 +
Workbench/ViewModels/MainMenuBarViewModel.cs | 2 +-
Workbench/Views/BaseNodesView.xaml | 6 +-
32 files changed, 2175 insertions(+), 432 deletions(-)
create mode 100644 Library/Network/Modbus/HexExtensions.cs
create mode 100644 Library/Network/Modbus/IModbusClient.cs
create mode 100644 Library/Network/Modbus/ModbusClientFactory.cs
create mode 100644 Library/Network/Modbus/ModbusException.cs
create mode 100644 Library/Network/Modbus/ModbusRequest.cs
create mode 100644 Library/Network/Modbus/ModbusRtuClient.cs
create mode 100644 Library/Network/Modbus/ModbusRtuRequest.cs
create mode 100644 Library/Network/Modbus/ModbusUdpClient.cs
delete mode 100644 Serein.Script/SereinSciptException.cs
create mode 100644 Serein.Script/SereinSciptParserException.cs
create mode 100644 Serein.Script/SereinScriptMethodInfo.cs
diff --git a/Library/Extension/FlowModelExtension.cs b/Library/Extension/FlowModelExtension.cs
index 6467e5d..d71b314 100644
--- a/Library/Extension/FlowModelExtension.cs
+++ b/Library/Extension/FlowModelExtension.cs
@@ -342,7 +342,7 @@ namespace Serein.Library
args[i] = mainArgTasks[i].Result;
}
- // 并发处理 params 参数
+ // 并发处理 params 类型的入参参数
if (paramsArgs != null)
{
int paramsLength = paramsArgs.Length;
diff --git a/Library/FlowNode/DelegateDetails.cs b/Library/FlowNode/DelegateDetails.cs
index 0b9841f..65e1dbb 100644
--- a/Library/FlowNode/DelegateDetails.cs
+++ b/Library/FlowNode/DelegateDetails.cs
@@ -11,41 +11,81 @@ using static Serein.Library.Utils.EmitHelper;
namespace Serein.Library
{
///
- /// Emit创建的委托描述,用于WebApi、WebSocket、NodeFlow动态调用方法的场景。
+ /// 通过 Emit 创建委托,代替反射调用方法,实现高性能的动态调用。
/// 一般情况下你无须内部细节,只需要调用 Invoke() 方法即可。
///
public class DelegateDetails
{
+ private readonly EmitType emitType = EmitType.None;
+
+ ///
+ /// 创建的委托类型
+ ///
+ public enum EmitType
+ {
+ ///
+ /// 默认
+ ///
+ None,
+ ///
+ /// 方法调用
+ ///
+ MethodInvoke,
+ ///
+ /// 字段赋值
+ ///
+ FieldSetter,
+ ///
+ /// 字段取值
+ ///
+ FieldGetter,
+ ///
+ /// 属性赋值
+ ///
+ PropertySetter,
+ ///
+ /// 属性取值
+ ///
+ PropertyGetter,
+ ///
+ /// 集合取值
+ ///
+ CollectionGetter,
+ ///
+ /// 集合赋值
+ ///
+ CollectionSetter
+ }
+
+ public enum GSType
+ {
+ Get,
+ Set,
+ }
+
+
///
/// 根据方法信息构建Emit委托
///
///
public DelegateDetails(MethodInfo methodInfo)
{
+ emitType = EmitType.MethodInvoke;
var emitMethodType = EmitHelper.CreateDynamicMethod(methodInfo, out var emitDelegate);
_emitMethodInfo = emitMethodType;
_emitDelegate = emitDelegate;
-
- SetFunc();
- }
-
-
- private void SetFunc()
- {
+ methodType = _emitMethodInfo.EmitMethodType;
if (_emitDelegate is Func