Пример #1
0
 public void Stop()
 {
     if (inputDetectionToken != null)
     {
         inputDetectionToken.Cancel();
         inputDetectionToken = null;
     }
 }
Пример #2
0
 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;
            }
Пример #5
0
 public IExecutionToken Track(IExecutionToken targetToken,
                              OnTokenComplete completionHandler)
 {
     return(Track(targetToken, completionHandler, null));
 }
Пример #6
0
 public IExecutionToken Track(IExecutionToken targetToken,
                              OnTokenComplete completionHandler,
                              object cookie)
 {
     return(executor.Execute(new WaitExecutionTokenActivity(targetToken, completionHandler, cookie)));
 }
Пример #7
0
        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);
        }
Пример #8
0
        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);
                }
            }
        }
Пример #9
0
        public void Start()
        {
            IActivity inputDetectionActivities = inputActivityBuilder.Build();

            inputDetectionToken = engine.Execute(inputDetectionActivities);
        }
Пример #10
0
        public void Append(IActivity activity)
        {
            IExecutionToken token = _engine.Execute(activity);

            _compositeToken.Append(token);
        }
Пример #11
0
        public static string ToJson(this IExecutionToken executionToken)
        {
            var json = new Dev2JsonSerializer();

            return(json.Serialize(executionToken, Formatting.None));
        }