public void Add(PollNode node) { lock (nodes) { if (!nodes.ContainsKey(node.GetId())) { nodes.Add(node.GetId(), node); } } }
/// <summary> /// построение /// </summary> /// <param name="root"></param> /// <returns></returns> private List <List <PollNodePathWrapper> > BuildPath(PollNode root) { if (root == null) { return(null); } if (root.IsFinalNode()) { return(new List <List <PollNodePathWrapper> >() { new List <PollNodePathWrapper>() { new PollNodePathWrapper(root) } }); } var allPaths = new List <List <PollNodePathWrapper> >(); foreach (var relation in RelationManager.Instance.GetOutputs(root.GetId(), "contains")) { var node = NodeManager.Instance.GetById(relation.GetEndId()); if (node.IsDisabled()) { continue; } //пропуск закрытых окон //if (node is Csd.CsdConnectionNode && !(node as Csd.CsdConnectionNode).InWindow(DateTime.Now)) continue; var paths = BuildPath(node); if (paths == null || !paths.Any()) { continue; } foreach (var path in paths) { var newpath = new List <PollNodePathWrapper>() { new PollNodePathWrapper(root) }; path.First().Left = relation.GetPort(); newpath.AddRange(path); allPaths.Add(newpath); } } return(allPaths); }