mirror of
https://gitee.com/langsisi_admin/serein-flow
synced 2026-04-05 23:56:35 +08:00
修改了logwindows输出,避免高频输出时卡死。修改了流程运行上下文,使节点具备终止分支运行的能力。
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
using Serein.Library.Utils;
|
||||
using Serein.Library.Enums;
|
||||
using Serein.Library.Utils;
|
||||
using System;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
@@ -13,14 +14,35 @@ namespace Serein.Library.Api
|
||||
/// 运行环境,包含IOC容器。
|
||||
/// </summary>
|
||||
IFlowEnvironment Env { get; }
|
||||
|
||||
|
||||
RunState RunState { get; }
|
||||
|
||||
/// <summary>
|
||||
/// 获取节点的数据(当前节点需要获取上一节点数据时,需要从 运行时上一节点 的Guid 通过这个方法进行获取
|
||||
/// </summary>
|
||||
/// <param name="nodeGuid"></param>
|
||||
/// <returns></returns>
|
||||
object GetFlowData(string nodeGuid);
|
||||
|
||||
/// <summary>
|
||||
/// 添加或更新当前节点的数据
|
||||
/// </summary>
|
||||
/// <param name="nodeGuid"></param>
|
||||
/// <param name="flowData"></param>
|
||||
void AddOrUpdate(string nodeGuid, object flowData);
|
||||
|
||||
/// <summary>
|
||||
/// 用以提前结束分支运行
|
||||
/// </summary>
|
||||
void EndCurrentBranch();
|
||||
|
||||
/*/// <summary>
|
||||
/// 定时循环触发
|
||||
/// </summary>
|
||||
/// <param name="callback"></param>
|
||||
/// <param name="time"></param>
|
||||
/// <param name="count"></param>
|
||||
/// <returns></returns>
|
||||
// Task CreateTimingTask(Action callback, int time = 100, int count = -1);
|
||||
}
|
||||
// Task CreateTimingTask(Action callback, int time = 100, int count = -1);*/
|
||||
}
|
||||
}
|
||||
|
||||
@@ -379,7 +379,8 @@ namespace Serein.Library.Api
|
||||
{
|
||||
#region 属性
|
||||
/// <summary>
|
||||
/// IOC容器
|
||||
/// <para>单例模式IOC容器,内部维护了一个实例字典,默认使用类型的FullName作为Key,如果以“接口-实现类”的方式注册,那么将使用接口类型的FullName作为Key。</para>
|
||||
/// <para>当某个类型注册绑定成功后,将不会因为其它地方尝试注册相同类型的行为导致类型被重新创建。</para>
|
||||
/// </summary>
|
||||
ISereinIOC IOC { get; }
|
||||
|
||||
@@ -387,12 +388,26 @@ namespace Serein.Library.Api
|
||||
/// 环境名称
|
||||
/// </summary>
|
||||
string EnvName { get; }
|
||||
|
||||
/// <summary>
|
||||
/// 是否全局中断
|
||||
/// </summary>
|
||||
bool IsGlobalInterrupt { get; }
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// DLL中NodeAction特性的方法描述的所有原始副本
|
||||
/// </summary>
|
||||
Dictionary<NodeLibrary, List<MethodDetails>> MethodDetailss { get; }
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 流程运行状态
|
||||
/// </summary>
|
||||
RunState FlowState { get; set; }
|
||||
/// <summary>
|
||||
/// 全局触发器运行状态
|
||||
/// </summary>
|
||||
RunState FlipFlopState { get; set; }
|
||||
|
||||
#endregion
|
||||
|
||||
@@ -545,15 +560,22 @@ namespace Serein.Library.Api
|
||||
/// <param name="fromNodeGuid">起始节点</param>
|
||||
/// <param name="toNodeGuid">目标节点</param>
|
||||
/// <param name="connectionType">连接类型</param>
|
||||
void RemoteConnect(string fromNodeGuid, string toNodeGuid, ConnectionType connectionType);
|
||||
void RemoveConnect(string fromNodeGuid, string toNodeGuid, ConnectionType connectionType);
|
||||
/// <summary>
|
||||
/// 移除节点/区域/基础控件
|
||||
/// </summary>
|
||||
/// <param name="nodeGuid">待移除的节点Guid</param>
|
||||
void RemoteNode(string nodeGuid);
|
||||
void RemoveNode(string nodeGuid);
|
||||
|
||||
// 启动触发器
|
||||
/// <summary>
|
||||
/// 激活未启动的全局触发器
|
||||
/// </summary>
|
||||
/// <param name="nodeGuid"></param>
|
||||
void ActivateFlipflopNode(string nodeGuid);
|
||||
/// <summary>
|
||||
/// 终结一个全局触发器,在它触发后将不会再次监听消息(表现为已经启动的触发器至少会再次处理一次消息,后面版本再修正这个非预期行为)
|
||||
/// </summary>
|
||||
/// <param name="nodeGuid"></param>
|
||||
void TerminateFlipflopNode(string nodeGuid);
|
||||
|
||||
|
||||
|
||||
@@ -178,7 +178,7 @@ namespace Serein.Library.Entity
|
||||
public Position Position { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 是否选中
|
||||
/// 是否选中(暂时无效)
|
||||
/// </summary>
|
||||
public bool IsSelect { get; set; }
|
||||
}
|
||||
@@ -188,8 +188,17 @@ namespace Serein.Library.Entity
|
||||
/// </summary>
|
||||
public class Parameterdata
|
||||
{
|
||||
/// <summary>
|
||||
/// 参数类型,true时使用自定义的入参,false时由运行环境自动传参
|
||||
/// </summary>
|
||||
public bool State { get; set; }
|
||||
/// <summary>
|
||||
/// 自定义入参
|
||||
/// </summary>
|
||||
public string Value { get; set; }
|
||||
/// <summary>
|
||||
/// 表达式相关节点的表达式内容
|
||||
/// </summary>
|
||||
public string Expression { get; set; }
|
||||
|
||||
}
|
||||
@@ -200,6 +209,9 @@ namespace Serein.Library.Entity
|
||||
/// </summary>
|
||||
public class Position
|
||||
{
|
||||
/// <summary>
|
||||
/// 构造一个坐标
|
||||
/// </summary>
|
||||
public Position(double x, double y)
|
||||
{
|
||||
this.X = x; this.Y = y;
|
||||
|
||||
27
Library/Enums/RunState.cs
Normal file
27
Library/Enums/RunState.cs
Normal file
@@ -0,0 +1,27 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Serein.Library.Enums
|
||||
{
|
||||
/// <summary>
|
||||
/// 流程运行状态
|
||||
/// </summary>
|
||||
public enum RunState
|
||||
{
|
||||
/// <summary>
|
||||
/// 初始化值,等待开始。只有初始化时才会存在该值,后续每次重新开始都是从 Completion 变成 Running)
|
||||
/// </summary>
|
||||
NoStart,
|
||||
/// <summary>
|
||||
/// 正在运行
|
||||
/// </summary>
|
||||
Running,
|
||||
/// <summary>
|
||||
/// 运行完成
|
||||
/// </summary>
|
||||
Completion,
|
||||
}
|
||||
}
|
||||
@@ -34,6 +34,12 @@ namespace Serein.Library.Network.WebSocketCommunication.Handle
|
||||
/// </summary>
|
||||
public event Action<Exception, Action<object>> OnExceptionTracking;
|
||||
|
||||
/// <summary>
|
||||
/// 添加消息处理与异常处理
|
||||
/// </summary>
|
||||
/// <param name="themeKeyName"></param>
|
||||
/// <param name="dataKeyName"></param>
|
||||
/// <returns></returns>
|
||||
private WebSocketHandleModule AddMyHandleModule(string themeKeyName, string dataKeyName)
|
||||
{
|
||||
var key = (themeKeyName, dataKeyName);
|
||||
@@ -45,7 +51,11 @@ namespace Serein.Library.Network.WebSocketCommunication.Handle
|
||||
return myHandleModule;
|
||||
}
|
||||
|
||||
public void RemoteModule(ISocketHandleModule socketControlBase)
|
||||
/// <summary>
|
||||
/// 移除某个模块的WebSocket消息处理
|
||||
/// </summary>
|
||||
/// <param name="socketControlBase"></param>
|
||||
public void RemoveModule(ISocketHandleModule socketControlBase)
|
||||
{
|
||||
var type = socketControlBase.GetType();
|
||||
var moduleAttribute = type.GetCustomAttribute<AutoSocketModuleAttribute>();
|
||||
@@ -66,7 +76,7 @@ namespace Serein.Library.Network.WebSocketCommunication.Handle
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 添加
|
||||
/// 添加消息处理以及异常处理
|
||||
/// </summary>
|
||||
/// <param name="socketControlBase"></param>
|
||||
/// <param name="onExceptionTracking"></param>
|
||||
|
||||
@@ -50,6 +50,12 @@ namespace Serein.Library.Utils
|
||||
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// 根据方法信息创建动态调用的委托,返回方法类型,以及传出一个委托
|
||||
/// </summary>
|
||||
/// <param name="methodInfo"></param>
|
||||
/// <param name="delegate"></param>
|
||||
/// <returns></returns>
|
||||
public static EmitMethodType CreateDynamicMethod( MethodInfo methodInfo,out Delegate @delegate)
|
||||
{
|
||||
bool IsTask = IsGenericTask(methodInfo.ReturnType, out var taskGenericsType);
|
||||
|
||||
Reference in New Issue
Block a user