Example #1
0
        // [rgn] Public Methods (2)

        public static bool IsDone(this PipelineStateInfo psi)
        {
            return
                (psi.State == PipelineState.Completed ||
                 psi.State == PipelineState.Stopped ||
                 psi.State == PipelineState.Failed);
        }
Example #2
0
 internal PSInvocationStateInfo(PipelineStateInfo pipelineStateInfo)
 {
     using (PSInvocationStateInfo.tracer.TraceConstructor((object)this))
     {
         this.executionState  = (PSInvocationState)pipelineStateInfo.State;
         this.exceptionReason = pipelineStateInfo.Reason;
     }
 }
 internal PipelineStateInfo(PipelineStateInfo pipelineStateInfo)
 {
     using (PipelineStateInfo._trace.TraceConstructor((object)this))
     {
         this._state  = pipelineStateInfo.State;
         this._reason = pipelineStateInfo.Reason;
     }
 }
Example #4
0
        private void SetPipelineState(PipelineState state, Exception reason)
        {
            _pipelineStateInfo = new PipelineStateInfo(state, reason);

            if (StateChanged != null)
            {
                StateChanged(this, new PipelineStateEventArgs(_pipelineStateInfo));
            }
        }
Example #5
0
 public ExecutionEventQueueItem(
     PipelineStateInfo pipelineStateInfo,
     RunspaceAvailability currentAvailability,
     RunspaceAvailability newAvailability)
 {
     this.PipelineStateInfo           = pipelineStateInfo;
     this.CurrentRunspaceAvailability = currentAvailability;
     this.NewRunspaceAvailability     = newAvailability;
 }
Example #6
0
        private void SetPipelineState(PipelineState state, Exception reason)
        {
            using (RemotePipeline._trace.TraceMethod("{0} to {1} {2}", (object)this._pipelineStateInfo.State, (object)state, reason != null ? (object)reason.Message : (object)""))
            {
                PipelineState     state1            = state;
                PipelineStateInfo pipelineStateInfo = (PipelineStateInfo)null;
                lock (this._syncRoot)
                {
                    switch (this._pipelineStateInfo.State)
                    {
                    case PipelineState.Running:
                        if (state == PipelineState.Running)
                        {
                            return;
                        }
                        break;

                    case PipelineState.Stopping:
                        if (state == PipelineState.Running || state == PipelineState.Stopping)
                        {
                            return;
                        }
                        state1 = PipelineState.Stopped;
                        break;

                    case PipelineState.Stopped:
                        return;

                    case PipelineState.Completed:
                        return;

                    case PipelineState.Failed:
                        return;
                    }
                    this._pipelineStateInfo = new PipelineStateInfo(state1, reason);
                    pipelineStateInfo       = this._pipelineStateInfo;
                    RunspaceAvailability runspaceAvailability = this._runspace.RunspaceAvailability;
                    this._runspace.UpdateRunspaceAvailability(this._pipelineStateInfo.State, false);
                    this._executionEventQueue.Enqueue(new RemotePipeline.ExecutionEventQueueItem(this._pipelineStateInfo.Clone(), runspaceAvailability, this._runspace.RunspaceAvailability));
                }
                if (pipelineStateInfo.State != PipelineState.Completed && pipelineStateInfo.State != PipelineState.Failed && pipelineStateInfo.State != PipelineState.Stopped)
                {
                    return;
                }
                this.Cleanup();
            }
        }
Example #7
0
        public LocalPipeline(LocalRunspace runspace, string command)
            : base()
        {
            _runspace             = runspace;
            _inputStream          = new ObjectStream();
            _outputStream         = new ObjectStream();
            _errorStream          = new ObjectStream();
            _inputPipelineWriter  = new ObjectStreamWriter(_inputStream);
            _outputPipelineReader = new PSObjectPipelineReader(_outputStream);
            _errorPipelineReader  = new ObjectPipelineReader(_errorStream);
            _pipelineStateInfo    = new PipelineStateInfo(PipelineState.NotStarted);

            if (!string.IsNullOrEmpty(command))
            {
                Commands.Add(command);
            }
        }
Example #8
0
        /// <summary>
        /// Sets the new execution state.
        /// </summary>
        /// <param name="state">the new state</param>
        /// <param name="reason">
        /// An exception indicating that state change is the result of an error,
        /// otherwise; null.
        /// </param>
        /// <remarks>
        /// Sets the internal execution state information member variable. It
        /// also adds PipelineStateInfo to a queue. RaisePipelineStateEvents
        /// raises event for each item in this queue.
        /// </remarks>
        private void SetPipelineState(PipelineState state, Exception reason)
        {
            PipelineState     copyState     = state;
            PipelineStateInfo copyStateInfo = null;

            lock (_syncRoot)
            {
                switch (_pipelineStateInfo.State)
                {
                case PipelineState.Completed:
                case PipelineState.Failed:
                case PipelineState.Stopped:
                    return;

                case PipelineState.Running:
                {
                    if (state == PipelineState.Running)
                    {
                        return;
                    }
                }
                break;

                case PipelineState.Stopping:
                {
                    if (state == PipelineState.Running || state == PipelineState.Stopping)
                    {
                        return;
                    }
                    else
                    {
                        copyState = PipelineState.Stopped;
                    }
                }
                break;
                }
                _pipelineStateInfo = new PipelineStateInfo(copyState, reason);
                copyStateInfo      = _pipelineStateInfo;

                //Add _pipelineStateInfo to _executionEventQueue.
                //RaisePipelineStateEvents will raise event for each item
                //in this queue.
                //Note:We are doing clone here instead of passing the member
                //_pipelineStateInfo because we donot want outside
                //to change pipeline state.
                RunspaceAvailability previousAvailability = _runspace.RunspaceAvailability;

                Guid?cmdInstanceId = (_powershell != null) ? _powershell.InstanceId : (Guid?)null;
                _runspace.UpdateRunspaceAvailability(_pipelineStateInfo.State, false, cmdInstanceId);

                _executionEventQueue.Enqueue(
                    new ExecutionEventQueueItem(
                        _pipelineStateInfo.Clone(),
                        previousAvailability,
                        _runspace.RunspaceAvailability));
            } // lock...

            // using the copyStateInfo here as this piece of code is
            // outside of lock and _pipelineStateInfo might get changed
            // by two threads running concurrently..so its value is
            // not guaranteed to be the same for this entire method call.
            // copyStateInfo is a local variable.
            if (copyStateInfo.State == PipelineState.Completed ||
                copyStateInfo.State == PipelineState.Failed ||
                copyStateInfo.State == PipelineState.Stopped)
            {
                Cleanup();
            }
        }
Example #9
0
 internal PSInvocationStateInfo(PipelineStateInfo pipelineStateInfo)
 {
     throw new NotImplementedException();
 }
Example #10
0
 public static bool IsFailed(this PipelineStateInfo info)
 {
     return(info.State == PipelineState.Failed);
 }
Example #11
0
 internal PSInvocationStateInfo(PipelineStateInfo pipelineStateInfo)
 {
     this.executionState  = (PSInvocationState)pipelineStateInfo.State;
     this.exceptionReason = pipelineStateInfo.Reason;
 }
 internal PipelineStateEventArgs(PipelineStateInfo pipelineStateInfo)
 {
     using (PipelineStateEventArgs._trace.TraceConstructor((object)this))
         this._pipelineStateInfo = pipelineStateInfo;
 }