Beispiel #1
0
        /// <summary>
        /// Creates a workflow timer for a workflow instance based on a BLOB
        /// </summary>
        /// <param name="instance"></param>
        /// <param name="deserializedTimers"></param>
        public PSWorkflowTimer(PSWorkflowInstance instance, object deserializedTimers)
        {
            _instance = instance;
            _timers   = new Dictionary <WorkflowTimerType, PSTimer>();

            if (deserializedTimers == null)
            {
                throw new ArgumentNullException("deserializedTimers");
            }

            List <object> deserializedTimerList = (List <object>)deserializedTimers;

            foreach (object data in deserializedTimerList)
            {
                Debug.Assert(data != null, "Timer data should not have been null.");
                if (data != null)
                {
                    Debug.Assert(data is Dictionary <string, object>, "The timer data should be of type Dictionary<string, object>.");
                    if (data is Dictionary <string, object> )
                    {
                        PSTimer timer = new PSTimer((Dictionary <string, object>)data, Timer_WorkflowTimerElapsed);
                        _timers.Add(timer.TimerType, timer);
                    }
                }
            }
        }
Beispiel #2
0
        private void Timer_WorkflowTimerElapsed(PSTimer sender, ElapsedEventArgs e)
        {
            if (disposed)
            {
                return;
            }

            StructuredTracer.Correlate();
            Tracer.WriteMessage("PSWorkflowTimer Elapsed: " + sender.TimerType);

            if (disposed)
            {
                return;
            }

            switch (sender.TimerType)
            {
            case WorkflowTimerType.RunningTimer:
                sender.Stop();
                TerminateWorkflow(Resources.RunningTimeReached);
                break;

            case WorkflowTimerType.ElapsedTimer:
                sender.Stop();
                TerminateAndRemoveWorkflow(Resources.ElapsedTimeReached);
                break;
            }
        }
Beispiel #3
0
		public PSWorkflowTimer(PSWorkflowInstance instance, object deserializedTimers)
		{
			this.Tracer = PowerShellTraceSourceFactory.GetTraceSource();
			this.syncLock = new object();
			this.syncElapsedLock = new object();
			this._instance = instance;
			this._timers = new Dictionary<WorkflowTimerType, PSTimer>();
			if (deserializedTimers != null)
			{
				List<object> objs = (List<object>)deserializedTimers;
				foreach (object obj in objs)
				{
					if (obj == null || obj as Dictionary<string, object> == null)
					{
						continue;
					}
					PSTimer pSTimer = new PSTimer((Dictionary<string, object>)obj, new WorkflowTimerElapsedHandler(this.Timer_WorkflowTimerElapsed));
					this._timers.Add(pSTimer.TimerType, pSTimer);
				}
				return;
			}
			else
			{
				throw new ArgumentNullException("deserializedTimers");
			}
		}
Beispiel #4
0
 public PSWorkflowTimer(PSWorkflowInstance instance, object deserializedTimers)
 {
     this.Tracer          = PowerShellTraceSourceFactory.GetTraceSource();
     this.syncLock        = new object();
     this.syncElapsedLock = new object();
     this._instance       = instance;
     this._timers         = new Dictionary <WorkflowTimerType, PSTimer>();
     if (deserializedTimers != null)
     {
         List <object> objs = (List <object>)deserializedTimers;
         foreach (object obj in objs)
         {
             if (obj == null || obj as Dictionary <string, object> == null)
             {
                 continue;
             }
             PSTimer pSTimer = new PSTimer((Dictionary <string, object>)obj, new WorkflowTimerElapsedHandler(this.Timer_WorkflowTimerElapsed));
             this._timers.Add(pSTimer.TimerType, pSTimer);
         }
         return;
     }
     else
     {
         throw new ArgumentNullException("deserializedTimers");
     }
 }
Beispiel #5
0
        private void Timer_WorkflowTimerElapsed(PSTimer sender, ElapsedEventArgs e)
        {
            if (!this.disposed)
            {
                PSWorkflowTimer.StructuredTracer.Correlate();
                this.Tracer.WriteMessage(string.Concat("PSWorkflowTimer Elapsed: ", sender.TimerType));
                if (!this.disposed)
                {
                    WorkflowTimerType timerType = sender.TimerType;
                    switch (timerType)
                    {
                    case WorkflowTimerType.RunningTimer:
                    {
                        sender.Stop();
                        this.TerminateWorkflow(Resources.RunningTimeReached);
                        return;
                    }

                    case WorkflowTimerType.ElapsedTimer:
                    {
                        sender.Stop();
                        this.TerminateAndRemoveWorkflow(Resources.ElapsedTimeReached);
                        return;
                    }

                    default:
                    {
                        return;
                    }
                    }
                }
                else
                {
                    return;
                }
            }
            else
            {
                return;
            }
        }
Beispiel #6
0
 internal void Stop()
 {
     if (!this.disposed)
     {
         if (this.IsRunning)
         {
             lock (this.syncLock)
             {
                 if (this.IsRunning)
                 {
                     if (this.timer != null)
                     {
                         this.timer.Stop();
                         this.IsRunning = false;
                         if (!this.IsRecurring)
                         {
                             PSTimer  remainingTime = this;
                             DateTime utcNow        = DateTime.UtcNow;
                             remainingTime.RemainingTime = remainingTime.RemainingTime - utcNow.Subtract(this.StartedTime.Value);
                             if (this.RemainingTime < TimeSpan.FromMilliseconds(0))
                             {
                                 this.RemainingTime = TimeSpan.FromMilliseconds(0);
                             }
                         }
                     }
                 }
             }
             return;
         }
         else
         {
             return;
         }
     }
     else
     {
         return;
     }
 }
Beispiel #7
0
        private void Timer_WorkflowTimerElapsed(PSTimer sender, ElapsedEventArgs e)
        {
            if (disposed)
                return;

            StructuredTracer.Correlate();
            Tracer.WriteMessage("PSWorkflowTimer Elapsed: " + sender.TimerType);

            if (disposed)
                return;

            switch (sender.TimerType)
            {
                case WorkflowTimerType.RunningTimer:
                    sender.Stop();
                    TerminateWorkflow(Resources.RunningTimeReached);
                    break;
                case WorkflowTimerType.ElapsedTimer:
                    sender.Stop();
                    TerminateAndRemoveWorkflow(Resources.ElapsedTimeReached);
                    break;
            }
        }
Beispiel #8
0
        /// <summary>
        /// Creates a workflow timer for a workflow instance based on a BLOB
        /// </summary>
        /// <param name="instance"></param>
        /// <param name="deserializedTimers"></param>
        public PSWorkflowTimer(PSWorkflowInstance instance, object deserializedTimers)
        {
            _instance = instance;
            _timers = new Dictionary<WorkflowTimerType, PSTimer>();

            if (deserializedTimers == null) throw new ArgumentNullException("deserializedTimers");
            
            List<object> deserializedTimerList = (List<object>)deserializedTimers;
            foreach (object data in deserializedTimerList)
            {
                Debug.Assert(data != null, "Timer data should not have been null.");
                if (data != null)
                {
                    Debug.Assert(data is Dictionary<string, object>, "The timer data should be of type Dictionary<string, object>.");
                    if (data is Dictionary<string, object>)
                    {
                        PSTimer timer = new PSTimer((Dictionary<string, object>)data, Timer_WorkflowTimerElapsed);
                        _timers.Add(timer.TimerType, timer);
                    }
                }
            }
        }
Beispiel #9
0
		private void Timer_WorkflowTimerElapsed(PSTimer sender, ElapsedEventArgs e)
		{
			if (!this.disposed)
			{
				PSWorkflowTimer.StructuredTracer.Correlate();
				this.Tracer.WriteMessage(string.Concat("PSWorkflowTimer Elapsed: ", sender.TimerType));
				if (!this.disposed)
				{
					WorkflowTimerType timerType = sender.TimerType;
					switch (timerType)
					{
						case WorkflowTimerType.RunningTimer:
						{
							sender.Stop();
							this.TerminateWorkflow(Resources.RunningTimeReached);
							return;
						}
						case WorkflowTimerType.ElapsedTimer:
						{
							sender.Stop();
							this.TerminateAndRemoveWorkflow(Resources.ElapsedTimeReached);
							return;
						}
						default:
						{
							return;
						}
					}
				}
				else
				{
					return;
				}
			}
			else
			{
				return;
			}
		}