public void Stop() { if (inputDetectionToken != null) { inputDetectionToken.Cancel(); inputDetectionToken = null; } }
public WaitExecutionTokenActivity(IExecutionToken token, OnTokenComplete completionHandler, object cookie) { this.token = token; this.completionHandler = completionHandler; this.cookie = cookie; }
public WorkflowApplicationRun(WorkflowApplicationFactory owner, ManualResetEventSlim waitHandle, IDSFDataObject dataTransferObject, WorkflowApplication instance, IWorkspace workspace, IList <object> executionExtensions, Guid parentWorkflowInstanceId, bool isDebug, ErrorResultTO errors, IExecutionToken executionToken) { _owner = owner; _waitHandle = waitHandle; _result = dataTransferObject; _instance = instance; _workspace = workspace; _executionExtensions = executionExtensions; _isDebug = isDebug; _parentWorkflowInstanceID = parentWorkflowInstanceId; _executionToken = executionToken; _instance.PersistableIdle = OnPersistableIdle; _instance.Unloaded = OnUnloaded; _instance.Completed = OnCompleted; _instance.Aborted = OnAborted; _instance.OnUnhandledException = OnUnhandledException; AllErrors = errors; }
public WorkflowApplicationRun(WorkflowApplicationFactory owner, ManualResetEventSlim waitHandle, IDSFDataObject dataTransferObject, WorkflowApplication instance, IWorkspace workspace, IList<object> executionExtensions, Guid parentWorkflowInstanceId, bool isDebug, ErrorResultTO errors, IExecutionToken executionToken) { _owner = owner; _waitHandle = waitHandle; _result = dataTransferObject; _instance = instance; _workspace = workspace; _executionExtensions = executionExtensions; _isDebug = isDebug; _parentWorkflowInstanceID = parentWorkflowInstanceId; _executionToken = executionToken; _instance.PersistableIdle = OnPersistableIdle; _instance.Unloaded = OnUnloaded; _instance.Completed = OnCompleted; _instance.Aborted = OnAborted; _instance.OnUnhandledException = OnUnhandledException; AllErrors = errors; }
public IExecutionToken Track(IExecutionToken targetToken, OnTokenComplete completionHandler) { return(Track(targetToken, completionHandler, null)); }
public IExecutionToken Track(IExecutionToken targetToken, OnTokenComplete completionHandler, object cookie) { return(executor.Execute(new WaitExecutionTokenActivity(targetToken, completionHandler, cookie))); }
bool ExecuteProcess(string val, IExecutionToken executionToken, out StreamReader errorReader, out StringBuilder outputReader) { outputReader = new StringBuilder(); _process = new Process(); using (_process) { var processStartInfo = CreateProcessStartInfo(val); if (processStartInfo == null) { // ReSharper disable NotResolvedInText throw new ArgumentNullException("processStartInfo"); // ReSharper restore NotResolvedInText } _process.StartInfo = processStartInfo; var processStarted = _process.Start(); StringBuilder reader = outputReader; errorReader = _process.StandardError; if (!ProcessHasStarted(processStarted, _process)) { return(false); } if (!_process.HasExited) { _process.PriorityClass = CommandPriority; } _process.StandardInput.Close(); // bubble user termination down the chain ;) while (!_process.HasExited && !executionToken.IsUserCanceled) { reader.Append(_process.StandardOutput.ReadToEnd()); if (!_process.HasExited && _process.Threads.Cast <ProcessThread>().Any(a => a.ThreadState == System.Diagnostics.ThreadState.Wait && a.WaitReason == ThreadWaitReason.UserRequest)) { //reader.Append(_process.StandardOutput.ReadToEnd()); _process.Kill(); } else if (!_process.HasExited) { var isWaitingForUserInput = ModalChecker.IsWaitingForUserInput(_process); if (!isWaitingForUserInput) { continue; } //_process.OutputDataReceived -= a; _process.Kill(); throw new ApplicationException("The process required user input."); } Thread.Sleep(10); } // user termination exit ;) if (executionToken.IsUserCanceled) { // darn .Kill() does not kill the process tree ;( // Nor does .CloseMainWindow() as people have claimed, hence the hand rolled process tree killer - WTF M$ ;( KillProcessAndChildren(_process.Id); } reader.Append(_process.StandardOutput.ReadToEnd()); //_process.OutputDataReceived -= a; _process.Close(); } return(true); }
protected override void ExecuteTool(IDSFDataObject dataObject) { IExecutionToken exeToken = dataObject.ExecutionToken; _debugInputs = new List <DebugItem>(); _debugOutputs = new List <DebugItem>(); var allErrors = new ErrorResultTO(); InitializeDebug(dataObject); try { if (dataObject.IsDebugMode()) { AddDebugInputItem(new DebugEvalResult(CommandFileName, "Command", dataObject.Environment)); } var itr = new WarewolfIterator(dataObject.Environment.Eval(CommandFileName)); if (!allErrors.HasErrors()) { while (itr.HasMoreData()) { var val = itr.GetNextValue(); { if (string.IsNullOrEmpty(val)) { throw new Exception("Empty script to execute"); } StreamReader errorReader; StringBuilder outputReader; if (!ExecuteProcess(val, exeToken, out errorReader, out outputReader)) { return; } allErrors.AddError(errorReader.ReadToEnd()); var bytes = Encoding.Default.GetBytes(outputReader.ToString().Trim()); string readValue = Encoding.ASCII.GetString(bytes).Replace("?", " "); //2013.06.03: Ashley Lewis for bug 9498 - handle multiple regions in result foreach (var region in DataListCleaningUtils.SplitIntoRegions(CommandResult)) { if (dataObject.Environment != null) { dataObject.Environment.Assign(region, readValue); } } errorReader.Close(); } } if (dataObject.IsDebugMode() && !allErrors.HasErrors()) { if (!string.IsNullOrEmpty(CommandResult)) { AddDebugOutputItem(new DebugEvalResult(CommandResult, "", dataObject.Environment)); } } } } catch (Exception e) { Dev2Logger.Log.Error("DSFCommandLine", e); allErrors.AddError(e.Message); } finally { // Handle Errors var hasErrors = allErrors.HasErrors(); if (hasErrors) { DisplayAndWriteError("DsfExecuteCommandLineActivity", allErrors); if (dataObject.Environment != null) { var errorString = allErrors.MakeDisplayReady(); dataObject.Environment.AddError(errorString); dataObject.Environment.Assign(CommandResult, null); } } if (dataObject.IsDebugMode()) { if (hasErrors) { AddDebugOutputItem(new DebugItemStaticDataParams("", CommandResult, "")); } DispatchDebugState(dataObject, StateType.Before); DispatchDebugState(dataObject, StateType.After); } if (!string.IsNullOrEmpty(_fullPath)) { File.Delete(_fullPath); } } }
public void Start() { IActivity inputDetectionActivities = inputActivityBuilder.Build(); inputDetectionToken = engine.Execute(inputDetectionActivities); }
public void Append(IActivity activity) { IExecutionToken token = _engine.Execute(activity); _compositeToken.Append(token); }
public static string ToJson(this IExecutionToken executionToken) { var json = new Dev2JsonSerializer(); return(json.Serialize(executionToken, Formatting.None)); }