在Serein.Library添加了基础功能模块,暂时实现了键值对/数组数据的创建(可配合JSON库进行序列化)

This commit is contained in:
fengjiayi
2024-11-04 23:30:52 +08:00
parent b7be0f2c6e
commit dff9a00fb6
33 changed files with 1046 additions and 609 deletions

View File

@@ -53,40 +53,36 @@ namespace Serein.NodeFlow.Model
/// <param name="context"></param>
/// <returns></returns>
public override async Task<object?> ExecutingAsync(IDynamicContext context)
{
// 条件区域中遍历每个条件节点
foreach (SingleConditionNode? node in ConditionNodes)
{
var state = await JudgeAsync(context, node);
context.NextOrientation = state; // 每次判读完成后,设置区域后继方向为判断结果
if (state != ConnectionInvokeType.IsSucceed)
{
// 如果条件不通过,立刻推出循环
break;
}
}
//var previousNode = context.GetPreviousNode()
return Task.FromResult(context.TransmissionData(this)); // 条件区域透传上一节点的数据
}
private async Task<ConnectionInvokeType> JudgeAsync(IDynamicContext context, SingleConditionNode node)
{
try
{
await node.ExecutingAsync(context);
return context.NextOrientation;
// 条件区域中遍历每个条件节点
foreach (SingleConditionNode? node in ConditionNodes)
{
var state = await node.ExecutingAsync(context);
if (context.NextOrientation != ConnectionInvokeType.IsSucceed)
{
// 如果条件不通过,立刻推出循环
break;
}
}
//var previousNode = context.GetPreviousNode()
return context.TransmissionData(this); // 条件区域透传上一节点的数据
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
context.NextOrientation = ConnectionInvokeType.IsError;
RuningException = ex;
return ConnectionInvokeType.IsError;
context.ExceptionOfRuning = ex;
return context.TransmissionData(this); // 条件区域透传上一节点的数据
}
}
public override ParameterData[] GetParameterdatas()
{
return [];

View File

@@ -108,7 +108,7 @@ namespace Serein.NodeFlow.Model
catch (Exception ex)
{
context.NextOrientation = ConnectionInvokeType.IsError;
RuningException = ex;
context.ExceptionOfRuning = ex;
}
Console.WriteLine($"{result} {Expression} -> " + context.NextOrientation);

View File

@@ -98,7 +98,7 @@ namespace Serein.NodeFlow.Model
catch (Exception ex)
{
context.NextOrientation = ConnectionInvokeType.IsError;
RuningException = ex;
context.ExceptionOfRuning = ex;
return parameter;
}

View File

@@ -43,7 +43,7 @@ namespace Serein.NodeFlow.Model
#endregion
MethodDetails md = MethodDetails;
if (!context.Env.TryGetDelegateDetails(md.AssemblyName, md.MethodName, out var dd))
if (!context.Env.TryGetDelegateDetails(md.AssemblyName, md.MethodName, out var dd)) // 流程运行到某个节点
{
throw new Exception("不存在对应委托");
}
@@ -72,14 +72,14 @@ namespace Serein.NodeFlow.Model
}
await Console.Out.WriteLineAsync($"触发器[{this.MethodDetails.MethodName}]异常:" + ex);
context.NextOrientation = ConnectionInvokeType.None;
RuningException = ex;
context.ExceptionOfRuning = ex;
return null;
}
catch (Exception ex)
{
await Console.Out.WriteLineAsync($"触发器[{this.MethodDetails.MethodName}]异常:" + ex);
context.NextOrientation = ConnectionInvokeType.IsError;
RuningException = ex;
context.ExceptionOfRuning = ex;
return null;
}
finally