/// <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); } } } }
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; } }
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"); } }
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"); } }
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; } }
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; } }
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; } }
/// <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); } } } }
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; } }