Files
serein-flow/README.md
2024-09-26 21:11:47 +08:00

69 lines
5.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 自述
基于WPFDotnet 8的流程可视化编辑器需二次开发。
不定期在Bilibili个人空间上更新相关的视频。
https://space.bilibili.com/33526379
# 计划任务 2024年9月17日更新
* (重要+优先)正在实现断点功能,单步执行
* 计划实现节点树视图、IOC容器对象视图
* 正在计划实现网络方面的通讯,方便传出、传入数据
* 正在计划新增基础节点“属性包装器”,用来收集各个节点的数据,包装成匿名对象/Json类型暂时未想到如何设计
* 正在计划实现对数据传递的包装, 尽可能避免拆箱、装箱,优化传递效率。(可能做不到)
# 如何加载我的DLL
使用 **DynamicFlow** 特性标记你的类,可以参照 **MyDll****SereinWAT** 的实现。编译为 Dll文件 后,拖入到软件中即可。
# 如何让我的方法成为节点?
使用 **NodeAction** 特性标记你的方法。
* 动作节点 - Action
* 触发器节点 - Flipflop
# 关于 DynamicNodeType 枚举的补充说明。
## 1. 不生成节点控件的枚举值:
* **Init - 初始化方法**
* 入参:**IDynamicContext**(有且只有一个参数)。
* 返回值:自定义,但软件目前不支持接收返回值。
* 描述在运行时首先被调用。语义类似于构造方法。建议在Init方法内初始化类、注册类等一切需要在构造函数中执行的方法。
* **Loading - 加载方法**
* 入参:**IDynamicContext**(有且只有一个参数)。
* 返回值:自定义,但软件目前不支持接收返回值。
* 描述当所有Dll的Init方法调用完成后首先调用、也才会调用DLL的Loading方法。建议在Loading方法内进行业务上的初始化例如启动Web启动第三方服务
* **Exit - 结束方法**
* 入参:**IDynamicContext**(有且只有一个参数)。
* 返回值:自定义,但软件目前不支持接收返回值。
* 描述:当结束/手动结束运行时会调用所有Dll的Exit方法。使用场景类似于终止内部的其它线程通知其它进程关闭例如停止第三方服务。
* **关于IDynamicContext说明**
* 基本说明IDynamicContext是动态上下文接口内部提供全局单例的IFlowEnvironment环境接口用以注册、获取实例单例模式一般情况下你无须关注IFlowEnvironment对外暴露的属性方法。除此之外还有一个用以创建定时循环任务的方法CreateTimingTask通过该方法可以实现类似于定时器的功能它的运行周期由运行环境进行管理。
## 2. 基础节点
* 待更新
## 3. 从DLL生成控件的枚举值
* **Action - 动作**
* 入参自定义。如果传入DynamicContext会传入当前的上下文如果传入NodeBase会传入节点对应的Model。第一个非[Explicit]特性的参数会尝试从上一节点的获取FlowData变量并根据当前入参类型尝试进行类型转换。
* 返回值自定义返回值由对应的Model类的object? FlowData变量接收。
* 描述:同步执行对应的方法。
* **Flipflop - 触发器**
* 全局触发器
* 入参依照Action节点。
* 返回值Task`<IFlipflopContext>`
* 描述运行开始时所有无上级节点的触发器节点在当前分支中作为起始节点分别建立新的线程运行然后异步等待触发如果有。这种触发器拥有独自的DynamicContext上下文共用同一个Ioc执行完成之后会重新从分支起点的触发器开始等待。
* 分支中的触发器
* 入参依照Action节点。
* 返回值Task`<IFlipflopContext>`
* 描述:接收上一节点传递的上下文,同样进入异步等待,但执行完成后不会再次等待自身(只会触发一次)。
* IFlipflopContext
* 基本说明IFlipflopContext是一个接口你无须关心内部实现。
* 参数描述State状态枚举描述Succeed、Cancel、Error、Cancel如果返回Cancel则不会执行后继分支如果返回其它状态则会获取对应的后继分支开始执行。
* 参数描述TriggerData内部分别有状态描述、触发的参数。触发状态有两种External外部触发Overtime超时触发当你在代码中的其他地方主动触发了触发器则该次触发类型为External当你在创建触发器后超过了指定时间创建触发器时会要求声明超时时间则会自动触发但触发类型为Overtime触发参数未你在创建触发器时指定的值
* 使用场景配合ChannelFlowTrigger`<TEnum>`使用定时从PLC中获取状态当某个变量发生改变时会通知持有 Channel`<TriggerData>`的触发器,如果需要,可以传递对应的数据。
演示:
![image](https://github.com/fhhyyp/serein-flow/blob/cc5f8255135b96c6bb3669bc4aa8d8167a71c262/Image/%E6%BC%94%E7%A4%BA%20-%201.png)
![image](https://github.com/fhhyyp/serein-flow/blob/cc5f8255135b96c6bb3669bc4aa8d8167a71c262/Image/%E6%BC%94%E7%A4%BA%20-%202.png)
![](./Image/演示 - 3.png)
![](./Image/演示 - 4.png)