From ef119e11e38ac2d108fadef66717c508784b821c Mon Sep 17 00:00:00 2001
From: fengjiayi <12821976+ning_xi@user.noreply.gitee.com>
Date: Fri, 20 Dec 2024 23:39:29 +0800
Subject: [PATCH] =?UTF-8?q?=E6=9A=82=E6=97=B6=E5=AE=9E=E7=8E=B0=E4=BA=86?=
=?UTF-8?q?=E7=AE=80=E9=99=8B=E7=9A=84=E8=84=9A=E6=9C=ACAST=E5=88=86?=
=?UTF-8?q?=E6=9E=90=E8=A7=A3=E9=87=8A=EF=BC=8C=E5=90=8E=E9=9D=A2=E5=86=8D?=
=?UTF-8?q?=E7=BB=91=E5=AE=9A=E5=88=B0=E6=8E=A7=E4=BB=B6=E4=B8=8A?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
Library/Api/IScriptFlowApi.cs | 58 ++
Library/Enums/NodeType.cs | 4 +
Library/FlowNode/DelegateDetails.cs | 47 +-
Library/FlowNode/NodeModelBaseData.cs | 8 -
Library/FlowNode/NodeModelBaseFunc.cs | 16 +-
Library/FlowNode/ScriptFlowApi.cs | 56 ++
Library/NodeStaticConfig.cs | 4 +-
Library/Serein.Library.csproj | 1 +
Library/Utils/DynamicObjectHelper.cs | 90 +++
Library/Utils/EmitHelper.cs | 67 +-
Library/Utils/SereinIoc.cs | 2 +
NodeFlow/Env/FlowEnvironment.cs | 7 +-
NodeFlow/Env/FlowFunc.cs | 1 +
NodeFlow/FlowStarter.cs | 47 +-
NodeFlow/Model/SingleScriptNode.cs | 143 ++++
NodeFlow/ScriptFlowApi.cs | 66 ++
NodeFlow/Serein.NodeFlow.csproj | 1 +
Serein.Script/Node/ASTNode.cs | 26 +
Serein.Script/Node/AssignmentNode.cs | 21 +
Serein.Script/Node/BinaryOperationNode.cs | 26 +
Serein.Script/Node/BooleanNode.cs | 17 +
Serein.Script/Node/ClassTypeDefinitionNode.cs | 24 +
Serein.Script/Node/CollectionIndexNode.cs | 20 +
Serein.Script/Node/FunctionCallNode.cs | 24 +
Serein.Script/Node/IdentifierNode.cs | 17 +
Serein.Script/Node/IfNode.cs | 21 +
Serein.Script/Node/MemberAccessNode.cs | 23 +
Serein.Script/Node/MemberAssignmentNode.cs | 25 +
Serein.Script/Node/MemberFunctionCallNode.cs | 25 +
Serein.Script/Node/NullNode.cs | 15 +
Serein.Script/Node/NumberNode.cs | 21 +
Serein.Script/Node/ObjectInstantiationNode.cs | 23 +
Serein.Script/Node/ProgramNode.cs | 22 +
Serein.Script/Node/ReturnNode.cs | 25 +
Serein.Script/Node/StringNode.cs | 61 ++
Serein.Script/Node/WhileNode.cs | 19 +
Serein.Script/Serein.Script.csproj | 19 +
Serein.Script/SereinScriptInterpreter.cs | 532 ++++++++++++++
Serein.Script/SereinScriptLexer.cs | 360 ++++++++++
Serein.Script/SereinScriptParser.cs | 647 ++++++++++++++++++
Serein.Script/Tool/DelegateDetails.cs | 119 ++++
Serein.Script/Tool/EmitHelper.cs | 203 ++++++
SereinFlow.sln | 6 +
WorkBench/App.xaml.cs | 143 +---
WorkBench/MainWindow.xaml | 1 +
WorkBench/MainWindow.xaml.cs | 4 +-
WorkBench/Node/NodeControlViewModelBase.cs | 68 +-
WorkBench/Serein.WorkBench.csproj | 1 +
Workbench/Node/View/ScriptNodeControl.xaml | 75 ++
Workbench/Node/View/ScriptNodeControl.xaml.cs | 95 +++
.../ViewModel/ScriptNodeControlViewModel.cs | 62 ++
Workbench/Themes/BindableRichTextBox.cs | 28 +
52 files changed, 3175 insertions(+), 261 deletions(-)
create mode 100644 Library/Api/IScriptFlowApi.cs
create mode 100644 Library/FlowNode/ScriptFlowApi.cs
create mode 100644 NodeFlow/Model/SingleScriptNode.cs
create mode 100644 NodeFlow/ScriptFlowApi.cs
create mode 100644 Serein.Script/Node/ASTNode.cs
create mode 100644 Serein.Script/Node/AssignmentNode.cs
create mode 100644 Serein.Script/Node/BinaryOperationNode.cs
create mode 100644 Serein.Script/Node/BooleanNode.cs
create mode 100644 Serein.Script/Node/ClassTypeDefinitionNode.cs
create mode 100644 Serein.Script/Node/CollectionIndexNode.cs
create mode 100644 Serein.Script/Node/FunctionCallNode.cs
create mode 100644 Serein.Script/Node/IdentifierNode.cs
create mode 100644 Serein.Script/Node/IfNode.cs
create mode 100644 Serein.Script/Node/MemberAccessNode.cs
create mode 100644 Serein.Script/Node/MemberAssignmentNode.cs
create mode 100644 Serein.Script/Node/MemberFunctionCallNode.cs
create mode 100644 Serein.Script/Node/NullNode.cs
create mode 100644 Serein.Script/Node/NumberNode.cs
create mode 100644 Serein.Script/Node/ObjectInstantiationNode.cs
create mode 100644 Serein.Script/Node/ProgramNode.cs
create mode 100644 Serein.Script/Node/ReturnNode.cs
create mode 100644 Serein.Script/Node/StringNode.cs
create mode 100644 Serein.Script/Node/WhileNode.cs
create mode 100644 Serein.Script/Serein.Script.csproj
create mode 100644 Serein.Script/SereinScriptInterpreter.cs
create mode 100644 Serein.Script/SereinScriptLexer.cs
create mode 100644 Serein.Script/SereinScriptParser.cs
create mode 100644 Serein.Script/Tool/DelegateDetails.cs
create mode 100644 Serein.Script/Tool/EmitHelper.cs
create mode 100644 Workbench/Node/View/ScriptNodeControl.xaml
create mode 100644 Workbench/Node/View/ScriptNodeControl.xaml.cs
create mode 100644 Workbench/Node/ViewModel/ScriptNodeControlViewModel.cs
create mode 100644 Workbench/Themes/BindableRichTextBox.cs
diff --git a/Library/Api/IScriptFlowApi.cs b/Library/Api/IScriptFlowApi.cs
new file mode 100644
index 0000000..e7539b2
--- /dev/null
+++ b/Library/Api/IScriptFlowApi.cs
@@ -0,0 +1,58 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Serein.Library.Api
+{
+ ///
+ /// 脚本代码中关于流程运行的API
+ ///
+ public interface IScriptFlowApi
+ {
+ ///
+ /// 当前流程
+ ///
+ IFlowEnvironment Env { get; }
+ ///
+ /// 对应的节点
+ ///
+ NodeModelBase NodeModel { get; }
+
+ ///
+ /// 动态流程上下文
+ ///
+ IDynamicContext Context { get; set; }
+
+ ///
+ /// 根据索引从入参数据获取数据
+ ///
+ ///
+ ///
+ object GetDataOfParams(int index);
+ ///
+ /// 根据入参名称从入参数据获取数据
+ ///
+ ///
+ ///
+ object GetDataOfParams(string name);
+ ///
+ /// 获取全局数据
+ ///
+ ///
+ ///
+ object GetGlobalData(string keyName);
+ ///
+ /// 获取流程当前传递的数据
+ ///
+ ///
+ object GetFlowData();
+ ///
+ /// 立即调用某个节点并获取其返回值
+ ///
+ ///
+ ///
+ Task