using Serein.Library.Entity; using Serein.Library.Enums; using System; using System.Collections.Generic; using System.Reflection; using System.Threading.Tasks; namespace Serein.Library.Api { public class FlowEventArgs : EventArgs { public bool IsSucceed { get; protected set; } = true; public string ErrorTips { get; protected set; } = string.Empty; } public delegate void FlowRunCompleteHandler(FlowEventArgs eventArgs); /// /// 加载节点 /// public delegate void LoadNodeHandler(LoadNodeEventArgs eventArgs); public class LoadNodeEventArgs : FlowEventArgs { public LoadNodeEventArgs(NodeInfo NodeInfo, MethodDetails MethodDetailss) { this.NodeInfo = NodeInfo; this.MethodDetailss = MethodDetailss; } public NodeInfo NodeInfo { get; protected set; } public MethodDetails MethodDetailss { get; protected set; } } /// /// 加载DLL /// /// public delegate void LoadDLLHandler(LoadDLLEventArgs eventArgs); public class LoadDLLEventArgs : FlowEventArgs { public LoadDLLEventArgs(Assembly Assembly, List MethodDetailss) { this.Assembly = Assembly; this.MethodDetailss = MethodDetailss; } public Assembly Assembly { get; protected set; } public List MethodDetailss { get; protected set; } } /// /// 运行环境节点连接发生了改变 /// /// /// /// public delegate void NodeConnectChangeHandler(NodeConnectChangeEventArgs eventArgs); public class NodeConnectChangeEventArgs : FlowEventArgs { public enum ChangeTypeEnum { Create, Remote, } public NodeConnectChangeEventArgs(string fromNodeGuid, string toNodeGuid, ConnectionType connectionType, ChangeTypeEnum changeType) { this.FromNodeGuid = fromNodeGuid; this.ToNodeGuid = toNodeGuid; this.ConnectionType = connectionType; this.ChangeType = changeType; } public string FromNodeGuid { get; protected set; } public string ToNodeGuid { get; protected set; } public ConnectionType ConnectionType { get; protected set; } public ChangeTypeEnum ChangeType { get; protected set; } } /// /// 添加了节点 /// /// /// /// public delegate void NodeCreateHandler(NodeCreateEventArgs eventArgs); public class NodeCreateEventArgs : FlowEventArgs { public NodeCreateEventArgs(object nodeModel) { this.NodeModel = nodeModel; } public object NodeModel { get; private set; } } public delegate void NodeRemoteHandler(NodeRemoteEventArgs eventArgs); public class NodeRemoteEventArgs : FlowEventArgs { public NodeRemoteEventArgs(string nodeGuid) { this.NodeGuid = nodeGuid; } public string NodeGuid { get; private set; } } public delegate void StartNodeChangeHandler(StartNodeChangeEventArgs eventArgs); public class StartNodeChangeEventArgs: FlowEventArgs { public StartNodeChangeEventArgs(string oldNodeGuid, string newNodeGuid) { this.OldNodeGuid = oldNodeGuid; this.NewNodeGuid = newNodeGuid; ; } public string OldNodeGuid { get; private set; } public string NewNodeGuid { get; private set; } } public interface IFlowEnvironment { event FlowRunCompleteHandler OnFlowRunComplete; event LoadNodeHandler OnLoadNode; event LoadDLLHandler OnDllLoad; event NodeConnectChangeHandler OnNodeConnectChange; event NodeCreateHandler OnNodeCreate; event NodeRemoteHandler OnNodeRemote; event StartNodeChangeHandler OnStartNodeChange; /// /// 保存当前项目 /// /// SereinOutputFileData SaveProject(); /// /// 加载项目文件 /// /// /// void LoadProject(SereinOutputFileData projectFile, string filePath); /// /// 从文件中加载Dll /// /// void LoadDll(string dllPath); /// /// 清理加载的DLL(待更改) /// void ClearAll(); /// /// 获取方法描述 /// /// /// /// bool TryGetMethodDetails(string methodName,out MethodDetails md); /// /// 开始运行 /// Task StartAsync(); /// /// 结束运行 /// void Exit(); /// /// 设置流程起点节点 /// /// void SetStartNode(string nodeGuid); /// /// 在两个节点之间创建连接关系 /// /// 起始节点Guid /// 目标节点Guid /// 连接类型 void ConnectNode(string fromNodeGuid, string toNodeGuid, ConnectionType connectionType); /// /// 创建节点/区域/基础控件 /// /// 节点/区域/基础控件 /// 节点绑定的方法说明( void CreateNode(NodeControlType nodeBase, MethodDetails methodDetails = null); /// /// 移除两个节点之间的连接关系 /// /// 起始节点 /// 目标节点 /// 连接类型 void RemoteConnect(string fromNodeGuid, string toNodeGuid, ConnectionType connectionType); /// /// 移除节点/区域/基础控件 /// /// 待移除的节点Guid void RemoteNode(string nodeGuid); } }