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);
}
}