public void EvaluateProgramCondition(object evalArguments) { ProgramBlock program = (evalArguments as EvaluateProgramConditionArgs).Program; ConditionEvaluationCallback callback = (evalArguments as EvaluateProgramConditionArgs).Callback; // bool isConditionSatisfied = false; // while (isEngineRunning && program.IsEnabled) { if (program.IsRunning || !isEngineEnabled) { Thread.Sleep(1000); continue; } // program.RoutedEventAck.WaitOne(1000); // try { isConditionSatisfied = false; // var result = program.EvaluateCondition(); if (result != null && result.Exception != null) { // runtime error occurred, script is being disabled // so user can notice and fix it List <ProgramError> error = new List <ProgramError>() { program.GetFormattedError(result.Exception, true) }; program.ScriptErrors = JsonConvert.SerializeObject(error); program.IsEnabled = false; RaiseProgramModuleEvent(program, Properties.RUNTIME_ERROR, "TC: " + result.Exception.Message.Replace('\n', ' ').Replace('\r', ' ')); } else { isConditionSatisfied = (result != null ? (bool)result.ReturnValue : false); } // bool lastResult = program.LastConditionEvaluationResult; program.LastConditionEvaluationResult = isConditionSatisfied; // if (program.ConditionType == ConditionType.OnSwitchTrue) { isConditionSatisfied = (isConditionSatisfied == true && isConditionSatisfied != lastResult); } else if (program.ConditionType == ConditionType.OnSwitchFalse) { isConditionSatisfied = (isConditionSatisfied == false && isConditionSatisfied != lastResult); } else if (program.ConditionType == ConditionType.OnTrue || program.ConditionType == ConditionType.Once) { // noop } else if (program.ConditionType == ConditionType.OnFalse) { isConditionSatisfied = !isConditionSatisfied; } } catch (Exception ex) { // a runtime error occured List <ProgramError> error = new List <ProgramError>() { program.GetFormattedError(ex, true) }; program.ScriptErrors = JsonConvert.SerializeObject(error); program.IsEnabled = false; RaiseProgramModuleEvent(program, Properties.RUNTIME_ERROR, "TC: " + ex.Message.Replace('\n', ' ').Replace('\r', ' ')); } // callback(program, isConditionSatisfied); // program.RoutedEventAck.Reset(); } }
// TODO: v1.1 !!!IMPORTANT!!! move thread allocation and starting to ProgramEngineBase.cs class public void Run(ProgramBlock program, string options) { if (program.IsRunning) return; if (program.Engine.ProgramThread != null) { program.Engine.Stop(); program.IsRunning = false; } program.IsRunning = true; RaiseProgramModuleEvent(program, Properties.PROGRAM_STATUS, "Running"); program.TriggerTime = DateTime.UtcNow; program.Engine.ProgramThread = new Thread(() => { MethodRunResult result = null; try { result = program.Run(options); } catch (Exception ex) { result = new MethodRunResult(); result.Exception = ex; } // if (result != null && result.Exception != null && !result.Exception.GetType().Equals(typeof(System.Reflection.TargetException))) { // runtime error occurred, script is being disabled // so user can notice and fix it List<ProgramError> error = new List<ProgramError>() { program.GetFormattedError(result.Exception, false) }; program.ScriptErrors = JsonConvert.SerializeObject(error); program.IsEnabled = false; RaiseProgramModuleEvent(program, Properties.RUNTIME_ERROR, "CR: " + result.Exception.Message.Replace('\n', ' ').Replace('\r', ' ')); } program.IsRunning = false; program.Engine.ProgramThread = null; RaiseProgramModuleEvent(program, Properties.PROGRAM_STATUS, "Idle"); }); // if (program.ConditionType == ConditionType.Once) { program.IsEnabled = false; } // try { program.Engine.ProgramThread.Start(); } catch { program.Engine.Stop(); program.IsRunning = false; RaiseProgramModuleEvent(program, Properties.PROGRAM_STATUS, "Idle"); } // //Thread.Sleep(100); }
public void Run(ProgramBlock program, string options) { if (program.IsRunning) { return; } // if (program.ProgramThread != null) { program.Stop(); program.IsRunning = false; } // program.IsRunning = true; RaiseProgramModuleEvent(program, Properties.PROGRAM_STATUS, "Running"); // program.TriggerTime = DateTime.UtcNow; program.ProgramThread = new Thread(() => { MethodRunResult result = null; try { result = program.Run(options); } catch (Exception ex) { result = new MethodRunResult(); result.Exception = ex; } // if (result != null && result.Exception != null) { // runtime error occurred, script is being disabled // so user can notice and fix it List <ProgramError> error = new List <ProgramError>() { program.GetFormattedError(result.Exception, false) }; program.ScriptErrors = JsonConvert.SerializeObject(error); program.IsEnabled = false; RaiseProgramModuleEvent(program, Properties.RUNTIME_ERROR, "CR: " + result.Exception.Message.Replace('\n', ' ').Replace('\r', ' ')); } program.IsRunning = false; program.ProgramThread = null; RaiseProgramModuleEvent(program, Properties.PROGRAM_STATUS, "Idle"); }); // if (program.ConditionType == ConditionType.Once) { program.IsEnabled = false; } // try { program.ProgramThread.Start(); } catch { program.Stop(); program.IsRunning = false; RaiseProgramModuleEvent(program, Properties.PROGRAM_STATUS, "Idle"); } // //Thread.Sleep(100); }
// TODO: v1.1 !!!IMPORTANT!!! possibly move this inside ProgramEngineBase.cs class and rename to EvaluateStartupCode public void EvaluateProgramCondition(object evalArguments) { ProgramBlock program = (evalArguments as EvaluateProgramConditionArgs).Program; ConditionEvaluationCallback callback = (evalArguments as EvaluateProgramConditionArgs).Callback; // bool isConditionSatisfied = false; // while (isEngineRunning && program.IsEnabled) { // the startup code is not evaluated while the program is running if (program.IsRunning || !isEngineEnabled) { Thread.Sleep(1000); continue; } // wait 1 second or a new event program.Engine.RoutedEventAck.WaitOne(1000); // check if the program is still allowed to run if (program.IsRunning || !program.IsEnabled) { program.Engine.RoutedEventAck.Reset(); continue; } // evaluate and get result from the code try { isConditionSatisfied = false; program.WillRun = false; // var result = program.EvaluateCondition(); if (result != null && result.Exception != null) { // runtime error occurred, script is being disabled // so user can notice and fix it List <ProgramError> error = new List <ProgramError>() { program.GetFormattedError(result.Exception, true) }; program.ScriptErrors = JsonConvert.SerializeObject(error); program.IsEnabled = false; RaiseProgramModuleEvent(program, Properties.RuntimeError, "TC: " + result.Exception.Message.Replace('\n', ' ').Replace('\r', ' ')); } else { isConditionSatisfied = (result != null ? (bool)result.ReturnValue : false); } // bool lastResult = program.LastConditionEvaluationResult; program.LastConditionEvaluationResult = isConditionSatisfied; // if (program.ConditionType == ConditionType.OnSwitchTrue) { isConditionSatisfied = (isConditionSatisfied == true && isConditionSatisfied != lastResult); } else if (program.ConditionType == ConditionType.OnSwitchFalse) { isConditionSatisfied = (isConditionSatisfied == false && isConditionSatisfied != lastResult); } else if (program.ConditionType == ConditionType.OnTrue || program.ConditionType == ConditionType.Once) { // noop } else if (program.ConditionType == ConditionType.OnFalse) { isConditionSatisfied = !isConditionSatisfied; } } catch (Exception ex) { // a runtime error occured if (!ex.GetType().Equals(typeof(System.Reflection.TargetException))) { List <ProgramError> error = new List <ProgramError>() { program.GetFormattedError(ex, true) }; program.ScriptErrors = JsonConvert.SerializeObject(error); program.IsEnabled = false; RaiseProgramModuleEvent(program, Properties.RuntimeError, "TC: " + ex.Message.Replace('\n', ' ').Replace('\r', ' ')); } } // callback(program, isConditionSatisfied); // program.Engine.RoutedEventAck.Reset(); } }
// TODO: v1.1 !!!IMPORTANT!!! move thread allocation and starting to ProgramEngineBase.cs class public void Run(ProgramBlock program, string options) { if (program.IsRunning) { return; } if (program.Engine.ProgramThread != null) { program.Engine.Stop(); program.IsRunning = false; } program.IsRunning = true; RaiseProgramModuleEvent(program, Properties.ProgramStatus, "Running"); program.TriggerTime = DateTime.UtcNow; program.Engine.ProgramThread = new Thread(() => { try { MethodRunResult result = null; try { result = program.Run(options); } catch (Exception ex) { result = new MethodRunResult(); result.Exception = ex; } if (result != null && result.Exception != null && !result.Exception.GetType().Equals(typeof(System.Reflection.TargetException))) { // runtime error occurred, script is being disabled // so user can notice and fix it List <ProgramError> error = new List <ProgramError>() { program.GetFormattedError(result.Exception, false) }; program.ScriptErrors = JsonConvert.SerializeObject(error); program.IsEnabled = false; RaiseProgramModuleEvent(program, Properties.RuntimeError, "CR: " + result.Exception.Message.Replace('\n', ' ').Replace('\r', ' ')); } RaiseProgramModuleEvent(program, Properties.ProgramStatus, "Idle"); } catch (ThreadAbortException e) { // nothing to be done here RaiseProgramModuleEvent(program, Properties.ProgramStatus, "Interrupted"); } finally { program.IsRunning = false; program.Engine.ProgramThread = null; } }); // if (program.ConditionType == ConditionType.Once) { program.IsEnabled = false; } // try { program.Engine.ProgramThread.Start(); } catch { program.Engine.Stop(); program.IsRunning = false; RaiseProgramModuleEvent(program, Properties.ProgramStatus, "Idle"); } // //Thread.Sleep(100); }
private bool WillProgramRun(ProgramBlock program) { bool isConditionSatisfied = false; // evaluate and get result from the code lock (program.OperationLock) try { program.WillRun = false; // var result = program.EvaluateCondition(); if (result != null && result.Exception != null) { // runtime error occurred, script is being disabled // so user can notice and fix it List <ProgramError> error = new List <ProgramError>() { program.GetFormattedError(result.Exception, true) }; program.ScriptErrors = JsonConvert.SerializeObject(error); program.IsEnabled = false; RaiseProgramModuleEvent(program, Properties.RuntimeError, "TC: " + result.Exception.Message.Replace('\n', ' ').Replace('\r', ' ')); } else { isConditionSatisfied = (result != null ? (bool)result.ReturnValue : false); } // bool lastResult = program.LastConditionEvaluationResult; program.LastConditionEvaluationResult = isConditionSatisfied; // if (program.ConditionType == ConditionType.OnSwitchTrue) { isConditionSatisfied = (isConditionSatisfied == true && isConditionSatisfied != lastResult); } else if (program.ConditionType == ConditionType.OnSwitchFalse) { isConditionSatisfied = (isConditionSatisfied == false && isConditionSatisfied != lastResult); } else if (program.ConditionType == ConditionType.OnTrue || program.ConditionType == ConditionType.Once) { // noop } else if (program.ConditionType == ConditionType.OnFalse) { isConditionSatisfied = !isConditionSatisfied; } } catch (Exception ex) { // a runtime error occured if (!ex.GetType().Equals(typeof(System.Reflection.TargetException))) { List <ProgramError> error = new List <ProgramError>() { program.GetFormattedError(ex, true) }; program.ScriptErrors = JsonConvert.SerializeObject(error); program.IsEnabled = false; RaiseProgramModuleEvent(program, Properties.RuntimeError, "TC: " + ex.Message.Replace('\n', ' ').Replace('\r', ' ')); } } return(isConditionSatisfied && program.IsEnabled); }
public void EvaluateProgramCondition(object evalArguments) { ProgramBlock program = (evalArguments as EvaluateProgramConditionArgs).Program; ConditionEvaluationCallback callback = (evalArguments as EvaluateProgramConditionArgs).Callback; // bool isConditionSatisfied = false; // while (isEngineRunning && program.IsEnabled) { if (program.IsRunning || !isEngineEnabled) { Thread.Sleep(1000); continue; } // try { isConditionSatisfied = false; // if (program.Type.ToLower() != "wizard") { var result = program.EvaluateCondition(); if (result != null && result.Exception != null) { // runtime error occurred, script is being disabled // so user can notice and fix it List <ProgramError> error = new List <ProgramError>() { program.GetFormattedError(result.Exception, true) }; program.ScriptErrors = JsonConvert.SerializeObject(error); program.IsEnabled = false; RaiseProgramModuleEvent(program, Properties.RUNTIME_ERROR, "TC: " + result.Exception.Message.Replace('\n', ' ').Replace('\r', ' ')); } else { isConditionSatisfied = (result != null ? (bool)result.ReturnValue : false); } } else { // it is a Wizard Script isConditionSatisfied = (program.Conditions.Count > 0); for (int c = 0; c < program.Conditions.Count; c++) { // check for OR logic operator if (program.Conditions[c].ComparisonOperator == ComparisonOperator.LogicOrJoint) { if (isConditionSatisfied) { break; } else { isConditionSatisfied = (c < program.Conditions.Count - 1); continue; } } // bool res = false; try { res = VerifyProgramCondition(program.Conditions[c]); } catch { // TODO: report/handle exception } isConditionSatisfied = (isConditionSatisfied && res); } } // bool lastResult = program.LastConditionEvaluationResult; program.LastConditionEvaluationResult = isConditionSatisfied; // if (program.ConditionType == ConditionType.OnSwitchTrue) { isConditionSatisfied = (isConditionSatisfied == true && isConditionSatisfied != lastResult); } else if (program.ConditionType == ConditionType.OnSwitchFalse) { isConditionSatisfied = (isConditionSatisfied == false && isConditionSatisfied != lastResult); } else if (program.ConditionType == ConditionType.OnTrue || program.ConditionType == ConditionType.Once) { // noop } else if (program.ConditionType == ConditionType.OnFalse) { isConditionSatisfied = !isConditionSatisfied; } } catch (Exception ex) { // a runtime error occured List <ProgramError> error = new List <ProgramError>() { program.GetFormattedError(ex, true) }; program.ScriptErrors = JsonConvert.SerializeObject(error); program.IsEnabled = false; RaiseProgramModuleEvent(program, Properties.RUNTIME_ERROR, "TC: " + ex.Message.Replace('\n', ' ').Replace('\r', ' ')); } // callback(program, isConditionSatisfied); // Thread.Sleep(500); } }
private bool WillProgramRun(ProgramBlock program) { bool isConditionSatisfied = false; // evaluate and get result from the code lock (program.OperationLock) try { program.WillRun = false; // var result = program.EvaluateCondition(); if (result != null && result.Exception != null) { // runtime error occurred, script is being disabled // so user can notice and fix it List<ProgramError> error = new List<ProgramError>() { program.GetFormattedError(result.Exception, true) }; program.ScriptErrors = JsonConvert.SerializeObject(error); program.IsEnabled = false; RaiseProgramModuleEvent(program, Properties.RuntimeError, "TC: " + result.Exception.Message.Replace('\n', ' ').Replace('\r', ' ')); } else { isConditionSatisfied = (result != null ? (bool)result.ReturnValue : false); } // bool lastResult = program.LastConditionEvaluationResult; program.LastConditionEvaluationResult = isConditionSatisfied; // if (program.ConditionType == ConditionType.OnSwitchTrue) { isConditionSatisfied = (isConditionSatisfied == true && isConditionSatisfied != lastResult); } else if (program.ConditionType == ConditionType.OnSwitchFalse) { isConditionSatisfied = (isConditionSatisfied == false && isConditionSatisfied != lastResult); } else if (program.ConditionType == ConditionType.OnTrue || program.ConditionType == ConditionType.Once) { // noop } else if (program.ConditionType == ConditionType.OnFalse) { isConditionSatisfied = !isConditionSatisfied; } } catch (Exception ex) { // a runtime error occured if (!ex.GetType().Equals(typeof(System.Reflection.TargetException))) { List<ProgramError> error = new List<ProgramError>() { program.GetFormattedError(ex, true) }; program.ScriptErrors = JsonConvert.SerializeObject(error); program.IsEnabled = false; RaiseProgramModuleEvent(program, Properties.RuntimeError, "TC: " + ex.Message.Replace('\n', ' ').Replace('\r', ' ')); } } return isConditionSatisfied && program.IsEnabled; }