public void Execute(frmProgress fp) { this.fp = fp; ExecutionBlock currentNode = root.NormalChild; object lastObject = null; while (currentNode != null) { AddText("Executing block " + currentNode.DataBinding.Name + "\r\n"); ExecutionUnitOutput output = currentNode.Execute(lastObject); currentNode = currentNode.NormalChild; if (output == null) { lastObject = null; } else { lastObject = output.ObjectOutput; if (currentNode is DecisionUnit) { if (!output.DecisionOutput) { currentNode = currentNode.NegationChild; } } } } AddText("Execution done!"); }
public bool Execute() { if (BaseApplication.MainInstance == null) { //ramane apoi sa le numaram sa fie ok BaseApplication.MainInstance = new BaseApplication(1000); } FlowComponent current = StartNode.GetDefaultNextControl(); ExecutionUnitOutput eo = null; Object dataToken = null; while ((current != null) && (!(current is FlowStop))) { //trecem la urmatorul nod si executam tot ce se poate:d //procesam datele if (current is FlowProcessing) { //eo=(current as ProcessingBlock).ProcessData(dataToken, BaseApplication.MainInstance); //dataToken = (current as ProcessingBlock).ProcessData(dataToken, BaseApplication.MainInstance); //if (dataToken == null) return false; eo = (current as FlowProcessing).ExecutionUnit.Execute(dataToken); dataToken = eo.ObjectOutput; if (dataToken == null) { return(false); } current = current.GetDefaultNextControl(); } else if (current is FlowDecision) { eo = (current as FlowDecision).ExecutionUnit.Execute(dataToken); dataToken = eo.ObjectOutput; bool cond = eo.DecisionOutput; //bool cond = (current as DecisionBlock).EvaluateCondition(dataToken, BaseApplication.MainInstance); //dataToken = (current as DecisionBlock).GetData(dataToken, BaseApplication.MainInstance); if (dataToken == null) { return(false); } if (cond) { current = (current as FlowDecision).GetDefaultNextControl(); } else { current = ((current as FlowDecision).GetNegationNextControl() as FlowComponent); } } } return(true); }
public ExecutionUnitOutput Execute(object input) { MyDesignerItem.Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Normal, new Func(ChangeColor1)); //MyDesignerItem.Caption.Foreground = Brushes.Red; System.Windows.Forms.Application.DoEvents(); if (DataBinding.PluginDll == "") { try { Regex inputReg = new Regex(DataBinding.InputRegex.Regex, DataBinding.InputRegex.Options); Regex outputReg = new Regex(DataBinding.OutputRegex.Regex, DataBinding.OutputRegex.Options); Regex decisionReg = new Regex(DataBinding.ConditionRegex.Regex, DataBinding.ConditionRegex.Options); string inp = ""; foreach (Match m in inputReg.Matches(input.ToString())) { inp += m.Value; } Process p = new Process(); p.StartInfo.FileName = DataBinding.ExecutablePath; p.StartInfo.Arguments = DataBinding.Parameters.Replace("$script", DataBinding.ScriptPath).Replace("$input", inp); p.StartInfo.UseShellExecute = false; p.StartInfo.RedirectStandardOutput = true; p.Start(); string str = p.StandardOutput.ReadToEnd(); ExecutionUnitOutput eo = new ExecutionUnitOutput(); eo.UnformatedOutput = str; eo.DecisionOutput = decisionReg.IsMatch(str); eo.RegexpOuput = ""; foreach (Match m in outputReg.Matches(str)) { eo.RegexpOuput += m.Value; } eo.ObjectOutput = eo.RegexpOuput; p.Dispose(); MyDesignerItem.Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Normal, new Func(ChangeColor2)); return(eo); } catch (Exception e) { SysLog.MainInstance.WriteEventException(e); return(null); } } else { try { //incarcam dll-ul, cautam un assembly compatibil (trebuie sa fie doar unul) si-l instantiem in obiect ExecutionUnitOutput eo = new ExecutionUnitOutput(); //if (Plugin == null) { Assembly asm = Assembly.LoadFile(DataBinding.PluginDll); foreach (Type t in asm.GetTypes()) { //trebuie sa instantiem tipurile ca sa verificam daca implementeaza interfata try { Object o = Activator.CreateInstance(t); if (o is DecisionBlock) { eo.DecisionOutput = (o as DecisionBlock).EvaluateCondition(input, BaseApplication.MainInstance); eo.ObjectOutput = (o as DecisionBlock).GetData(input, BaseApplication.MainInstance); } if (o is ProcessingBlock) { eo.ObjectOutput = (o as ProcessingBlock).ProcessData(input, BaseApplication.MainInstance); } } catch (Exception e) { SysLog.MainInstance.WriteEventException(e); } } //} MyDesignerItem.Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Normal, new Func(ChangeColor2)); return(eo); } catch (Exception e) { SysLog.MainInstance.WriteEventException(e); MyDesignerItem.Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Normal, new Func(ChangeColor2)); return(null); } } }