using Serein.Library.Api; using Serein.Library.NodeGenerator; using System; using System.Collections.Generic; using System.ComponentModel; using System.Net.Mime; using System.Threading; namespace Serein.Library { /// /// 节点基类(数据) /// [NodeProperty(ValuePath = NodeValuePath.None)] public abstract partial class NodeModelBase : IDynamicFlowNode { /// /// 节点运行环境 /// [PropertyInfo(IsProtection = true)] private IFlowEnvironment _env; /// /// 标识节点对象全局唯一 /// [PropertyInfo(IsProtection = true)] private string _guid; /// /// 描述节点对应的控件类型 /// [PropertyInfo(IsProtection = true)] private NodeControlType _controlType; /// /// 在画布中的位置 /// [PropertyInfo(IsProtection = true)] private PositionOfUI _position ; /// /// 显示名称 /// [PropertyInfo] private string _displayName; /// /// 是否为起点控件 /// [PropertyInfo] private bool _isStart; /// /// 附加的调试功能 /// [PropertyInfo(IsProtection = true)] private NodeDebugSetting _debugSetting ; /// /// 方法描述。不包含Method与委托,需要通过MethodName从环境中获取委托进行调用。 /// [PropertyInfo(IsProtection = true)] private MethodDetails _methodDetails ; } public abstract partial class NodeModelBase : IDynamicFlowNode { /// /// 是否为基础节点 /// public virtual bool IsBase { get; } = false; /// /// 可以放置多少个节点 /// public virtual int MaxChildrenCount { get; } = 0; public NodeModelBase(IFlowEnvironment environment) { PreviousNodes = new Dictionary>(); SuccessorNodes = new Dictionary>(); foreach (ConnectionInvokeType ctType in NodeStaticConfig.ConnectionTypes) { PreviousNodes[ctType] = new List(); SuccessorNodes[ctType] = new List(); } ChildrenNode = new List(); DebugSetting = new NodeDebugSetting(this); this.Env = environment; } /// /// 不同分支的父节点(流程调用) /// public Dictionary> PreviousNodes { get; } /// /// 不同分支的子节点(流程调用) /// public Dictionary> SuccessorNodes { get; } /// /// 该节点的容器节点 /// public NodeModelBase ContainerNode { get; set; } = null; /// /// 该节点的子项节点(如果该节点是容器节点,那就会有这个参数) /// public List ChildrenNode { get; } } }