using Serein.Library.Api;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
namespace Serein.Library
{
///
/// 流程调用树,管理所有的调用节点
///
public class FlowCallTree : IFlowCallTree
{
private readonly SortedDictionary _callNodes = new SortedDictionary();
///
public List StartNodes { get; set; }
///
public List GlobalFlipflopNodes { get; set; }
///
/// 索引器,允许通过字符串索引访问CallNode
///
///
///
public CallNode this[string index]
{
get
{
_callNodes.TryGetValue(index, out CallNode callNode);
return callNode;
}
set
{
// 设置指定索引的值
_callNodes.Add(index, value);
}
}
///
/// 添加一个调用节点到流程调用树中
///
///
///
public void AddCallNode(string nodeGuid, Action action)
{
var node = new CallNode(nodeGuid, action);
_callNodes[nodeGuid] = node;
}
///
/// 添加一个调用节点到流程调用树中,使用异步函数
///
///
///
public void AddCallNode(string nodeGuid, Func func)
{
var node = new CallNode(nodeGuid, func);
_callNodes[nodeGuid] = node;
}
///
/// 获取指定Key的CallNode,如果不存在则返回null
///
///
///
public CallNode Get(string key)
{
return _callNodes.TryGetValue(key, out CallNode callNode) ? callNode : null;
}
}
}