using Serein.Library.Api; using Serein.Library.Utils; using System.Collections.Concurrent; namespace Serein.Library.Core.NodeFlow { /// /// 动态流程上下文 /// public class DynamicContext: IDynamicContext { /// /// 动态流程上下文 /// /// public DynamicContext(IFlowEnvironment flowEnvironment) { Env = flowEnvironment; RunState = RunState.Running; } /// /// 运行环境 /// public IFlowEnvironment Env { get; } /// /// 运行状态 /// public RunState RunState { get; set; } = RunState.NoStart; /// /// 每个上下文分别存放节点的当前数据 /// private readonly ConcurrentDictionary dictNodeFlowData = new ConcurrentDictionary(); /// /// 获取节点当前数据 /// /// /// public object? GetFlowData(string nodeGuid) { if(dictNodeFlowData.TryGetValue(nodeGuid,out var data)) { return data; } { return null; } } /// /// 添加或更新当前节点数据 /// /// 节点Guid /// 新的数据 public void AddOrUpdate(string nodeGuid,object? flowData) { // this.dictNodeFlowData.TryGetValue(nodeGuid, out var oldFlowData); this.dictNodeFlowData.AddOrUpdate(nodeGuid, _ => flowData, (_, _) => flowData); } /// /// 结束流程 /// public void EndCurrentBranch() { this.dictNodeFlowData?.Clear(); RunState = RunState.Completion; } } }