using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Serein.Library
{
///
/// 用来判断该方法属于什么节点,使运行环境决定方法的运行逻辑
///
public enum NodeType
{
///
/// 初始化,流程启动时执行(不生成节点)
/// 可以异步等待
///
Init,
///
/// 开始载入,流程启动时执行(不生成节点)
/// 可以异步等待
///
Loading,
///
/// 结束,流程结束时执行(不生成节点)
/// 可以异步等待
///
Exit,
///
/// UI节点(每个节点只会执行一次对应的方法)
/// 需要返回IEmbeddedContent接口
/// IEmbeddedContent接口实现由你决定
///
UI,
///
/// 触发器节点,必须为标记在可异步等待的方法,建议与继承了 FlowTriggerk<TEnum> 的实例对象搭配使用
/// 方法返回值必须为Task<IFlipflopContext<TResult>>,若为其它返回值,将不会创建节点。
/// 触发器根据在分支中的位置,分为两种类型:流程分支中的触发器、全局触发器
/// 一般的触发器:存在于分支某处,也可能是分支的终点,但一定不是流程的起点与分支的起点。
/// 一般的触发器行为:在当前分支中执行一次之后不再执行,一般用于等待某个操作的响应。
/// 一般的触发器入参:如果使用了 FlowTriggerk<TEnum> ,就会至少有一个枚举类型的参数,参数类型与 TEnum 泛型一致。
/// 全局触发器:没有上游分支、同时并非流程的起始节点。
/// 全局触发器行为:全局触发器会循环执行,直到流程结束。
/// 一般的触发器入参:如果使用了 FlowTriggerk<TEnum> ,就会至少有一个枚举类型的参数,参数类型与 TEnum 泛型一致。
///
Flipflop,
///
/// 动作节点,可以异步等待
/// 如果不显式的设置入参数据(例如文本、@Get取值表达式),就会默认使用该节点的运行时上一个节点的数据。
/// 假如上一节点是某个对象,但入参需要的是对象中某个属性/字段,则建议使用取值表达式、表达式节点获取所需要的数据。
/// 关于@Get取值表达式的使用方法:
/// public class UserInfo
/// {
/// public string Name; // 取值表达式:@Get .Name
/// public string[] PhoneNums; // 获取第1项的取值表达式:@Get .PhoneNums[0]
/// }
/// 取值表达式可以符合直觉的如此获取实例成员:@Get .Data.Array[2].Data......
/// 格式说明:@Get大小写不敏感,然后空一格,需要标记“.”,然后才是获取成员名称(成员名称大小写敏感)。
///
Action,
}
///
/// 生成的节点控件
///
public enum NodeControlType
{
///
/// 预料之外的情况
///
None,
///
/// 动作节点
///
Action,
///
/// 触发器节点
///
Flipflop,
///
/// UI节点
///
UI,
///
/// 表达式操作节点
///
[Description("base")]
ExpOp,
///
/// 表达式操作节点
///
[Description("base")]
ExpCondition,
///
/// 全局数据
///
[Description("base")]
GlobalData,
///
/// 脚本节点
///
[Description("base")]
Script,
///
/// C#脚本节点
///
[Description("base")]
NetScript,
///
/// 流程调用节点(流程图公开的节点)
///
[Description("base")]
FlowCall,
}
}