예제 #1
0
        protected void UpdateRunspaceAvailability(RunspaceState runspaceState, bool raiseEvent)
        {
            System.Management.Automation.Runspaces.RunspaceAvailability runspaceAvailability = this.RunspaceAvailability;
            RemoteRunspace     runspace = this as RemoteRunspace;
            ConnectCommandInfo info     = (runspace != null) ? runspace.RemoteCommand : null;

            switch (runspaceAvailability)
            {
            case System.Management.Automation.Runspaces.RunspaceAvailability.None:
                if (runspaceState == RunspaceState.Opened)
                {
                    this.RunspaceAvailability = ((info == null) && (this.GetCurrentlyRunningPipeline() == null)) ? System.Management.Automation.Runspaces.RunspaceAvailability.Available : System.Management.Automation.Runspaces.RunspaceAvailability.Busy;
                }
                break;

            case System.Management.Automation.Runspaces.RunspaceAvailability.Available:
            case System.Management.Automation.Runspaces.RunspaceAvailability.AvailableForNestedCommand:
            case System.Management.Automation.Runspaces.RunspaceAvailability.Busy:
                switch (runspaceState)
                {
                case RunspaceState.Closed:
                case RunspaceState.Closing:
                case RunspaceState.Broken:
                case RunspaceState.Disconnected:
                    this.RunspaceAvailability = System.Management.Automation.Runspaces.RunspaceAvailability.None;
                    goto Label_007D;
                }
                break;
            }
Label_007D:
            if (raiseEvent && (this.RunspaceAvailability != runspaceAvailability))
            {
                this.OnAvailabilityChanged(new RunspaceAvailabilityEventArgs(this.RunspaceAvailability));
            }
        }
예제 #2
0
 internal void UpdateRunspaceAvailability(System.Management.Automation.Runspaces.RunspaceAvailability availability, bool raiseEvent)
 {
     System.Management.Automation.Runspaces.RunspaceAvailability runspaceAvailability = this.RunspaceAvailability;
     this.RunspaceAvailability = availability;
     if (raiseEvent && (this.RunspaceAvailability != runspaceAvailability))
     {
         this.OnAvailabilityChanged(new RunspaceAvailabilityEventArgs(this.RunspaceAvailability));
     }
 }
예제 #3
0
 protected void SetRunspaceState(System.Management.Automation.Runspaces.RunspaceState state, Exception reason)
 {
     lock (this.SyncRoot)
     {
         if (state != this.RunspaceState)
         {
             this._runspaceStateInfo = new System.Management.Automation.Runspaces.RunspaceStateInfo(state, reason);
             System.Management.Automation.Runspaces.RunspaceAvailability currentAvailability = this._runspaceAvailability;
             base.UpdateRunspaceAvailability(this._runspaceStateInfo.State, false);
             this._runspaceEventQueue.Enqueue(new RunspaceEventQueueItem(this._runspaceStateInfo.Clone(), currentAvailability, this._runspaceAvailability));
         }
     }
 }
예제 #4
0
 internal RunspaceAvailabilityEventArgs(System.Management.Automation.Runspaces.RunspaceAvailability runspaceAvailability)
 {
     this._runspaceAvailability = runspaceAvailability;
 }
 internal RunspaceAvailabilityEventArgs(System.Management.Automation.Runspaces.RunspaceAvailability runspaceAvailability)
 {
     this._runspaceAvailability = runspaceAvailability;
 }
예제 #6
0
 internal void RaiseAvailabilityChangedEvent(System.Management.Automation.Runspaces.RunspaceAvailability availability)
 {
     this.OnAvailabilityChanged(new RunspaceAvailabilityEventArgs(availability));
 }
예제 #7
0
        internal void UpdateRunspaceAvailability(PipelineState pipelineState, bool raiseEvent)
        {
            System.Management.Automation.Runspaces.RunspaceAvailability runspaceAvailability = this.RunspaceAvailability;
            switch (runspaceAvailability)
            {
            case System.Management.Automation.Runspaces.RunspaceAvailability.None:
                if (pipelineState == PipelineState.Running)
                {
                    this.RunspaceAvailability = System.Management.Automation.Runspaces.RunspaceAvailability.Busy;
                }
                break;

            case System.Management.Automation.Runspaces.RunspaceAvailability.Available:
                switch (pipelineState)
                {
                case PipelineState.Running:
                    this.RunspaceAvailability = System.Management.Automation.Runspaces.RunspaceAvailability.Busy;
                    goto Label_0181;

                case PipelineState.Disconnected:
                    this.RunspaceAvailability = System.Management.Automation.Runspaces.RunspaceAvailability.None;
                    goto Label_0181;
                }
                break;

            case System.Management.Automation.Runspaces.RunspaceAvailability.AvailableForNestedCommand:
                switch (pipelineState)
                {
                case PipelineState.Running:
                    this.RunspaceAvailability = System.Management.Automation.Runspaces.RunspaceAvailability.Busy;
                    goto Label_0181;

                case PipelineState.Completed:
                    this.RunspaceAvailability = this.InNestedPrompt ? System.Management.Automation.Runspaces.RunspaceAvailability.AvailableForNestedCommand : System.Management.Automation.Runspaces.RunspaceAvailability.Available;
                    goto Label_0181;
                }
                break;

            case System.Management.Automation.Runspaces.RunspaceAvailability.Busy:
                switch (pipelineState)
                {
                case PipelineState.Stopped:
                case PipelineState.Completed:
                case PipelineState.Failed:
                    if (this.InNestedPrompt || (!(this is RemoteRunspace) && this.Debugger.InBreakpoint))
                    {
                        this.RunspaceAvailability = System.Management.Automation.Runspaces.RunspaceAvailability.AvailableForNestedCommand;
                    }
                    else
                    {
                        RemoteRunspace     runspace = this as RemoteRunspace;
                        ConnectCommandInfo info     = (runspace != null) ? runspace.RemoteCommand : null;
                        if (((pipelineState == PipelineState.Completed) || (pipelineState == PipelineState.Failed)) && (info != null))
                        {
                            runspace.RunspacePool.RemoteRunspacePoolInternal.ConnectCommands = null;
                            info = null;
                        }
                        Pipeline currentlyRunningPipeline = this.GetCurrentlyRunningPipeline();
                        if (currentlyRunningPipeline == null)
                        {
                            if (info == null)
                            {
                                if (runspace != null)
                                {
                                    this.RunspaceAvailability = runspace.RunspacePool.RemoteRunspacePoolInternal.AvailableForConnection ? System.Management.Automation.Runspaces.RunspaceAvailability.Available : System.Management.Automation.Runspaces.RunspaceAvailability.Busy;
                                }
                                else
                                {
                                    this.RunspaceAvailability = System.Management.Automation.Runspaces.RunspaceAvailability.Available;
                                }
                            }
                        }
                        else if (currentlyRunningPipeline.PipelineStateInfo.State == PipelineState.Running)
                        {
                            this.RunspaceAvailability = System.Management.Automation.Runspaces.RunspaceAvailability.Busy;
                        }
                        else
                        {
                            this.RunspaceAvailability = System.Management.Automation.Runspaces.RunspaceAvailability.Available;
                        }
                    }
                    goto Label_0181;

                case PipelineState.Disconnected:
                    this.RunspaceAvailability = System.Management.Automation.Runspaces.RunspaceAvailability.None;
                    goto Label_0181;
                }
                break;
            }
Label_0181:
            if (raiseEvent && (this.RunspaceAvailability != runspaceAvailability))
            {
                this.OnAvailabilityChanged(new RunspaceAvailabilityEventArgs(this.RunspaceAvailability));
            }
        }