public virtual INode GetNextNode( INode node, MultirotorClient client, IModel graph, Action<string> writeToMessageBox) { var outEdges = graph.Edges.Where(x => x.From == node).ToList(); if (outEdges.Count > 1) { writeToMessageBox("Error: Node " + node.Name + " has more than the 1 out edge "); client.Dispose(); return null; } if (outEdges.Count == 0) { if (recursionNodes.Count > 0) { return recursionNodes.Pop(); } writeToMessageBox("Error: Node " + node.Name + " has no out edges and it is not the final node "); client.Dispose(); return null; } return (INode)outEdges[0].To; }
/// <summary> /// Main execution method /// </summary> /// <param name="programGraph"> Visual program to execute </param> /// <param name="writeToConsole"> Method to writing to console </param> public void Execute(IModel programGraph, Action<string> writeToConsole) { var curNode = this.GetInitNode(programGraph, writeToConsole); if (curNode == null) { return; } writeToConsole("Running your code"); var client = new MultirotorClient(); while (recursionLevel >= 0) { Execution.Exec.ExecuteNode(ref curNode, client, programGraph, writeToConsole); curNode = Execution.Exec.GetNextNode(curNode, client, programGraph, writeToConsole); if (curNode == null) { return; } writeToConsole($"Node {curNode.Name} done"); } client.Land(); client.Dispose(); writeToConsole("Program done"); }
public override INode GetNextNode(INode node, MultirotorClient client, IModel graph, Action <string> writeToMessageBox) { var outEdges = graph.Edges.Where(x => x.From == node).ToList(); if (outEdges.Count != 2) { writeToMessageBox("Error: ifNode out edges count is not equal 2 "); client.Dispose(); return(null); } IEdge edge = outEdges[0]; if (this.condition) { return((INode)(edge.Attributes.ToList()[0].StringValue == "true" ? edge.To : outEdges[1].To)); } else { return((INode)(edge.Attributes.ToList()[0].StringValue == "false" ? edge.To : outEdges[1].To)); } }