/// <summary> /// Reset the monitor /// </summary> public void Reset() { this.WaitTimer.Stop(); this.WaitTimer.Reset(); this.Queuing = QueuingState.Normal; this.StoppedTimestamp = 0.0; this.TimeStopped = 0.0; this.StartedTimer = false; this.QueuingTime = this.DefaultQueueingTime; }
/// <summary> /// Updates the monitor with a new state of the vehicle /// </summary> /// <param name="StateMonitor"></param> public void Update(QueueingUpdate update, double ts) { if (update == QueueingUpdate.NotQueueing) { if (this.Queuing == QueuingState.Failed && this.NotQueuingTimer.ElapsedMilliseconds / 1000.0 > 7.0) { this.QueuingTime = Math.Min(this.QueuingTime + 10.0, this.MaximumQueuingTime); } else if (this.TimeStopped > (3.0 / 4.0) * this.QueuingTime) { this.QueuingTime = Math.Min(this.QueuingTime + 5.0, this.MaximumQueuingTime); } if (!this.NotQueuingTimer.IsRunning) { this.NotQueuingTimer.Start(); } else if (this.NotQueuingTimer.ElapsedMilliseconds / 1000.0 > QueuingTime) { this.QueuingTime = Math.Max(this.QueuingTime, Math.Min(this.NotQueuingTimer.ElapsedMilliseconds / 1000.0, this.MaximumQueuingTime / 2.0)); } this.Reset(); } else { if (this.NotQueuingTimer.IsRunning) { this.NotQueuingTimer.Stop(); } if (!this.StartedTimer) { this.StartedTimer = true; this.StoppedTimestamp = ts; } if (Queuing == QueuingState.Normal) { TimeStopped = ts - StoppedTimestamp; if (TimeStopped > QueuingTime) { Queuing = QueuingState.Failed; } } else { TimeStopped = ts - StoppedTimestamp; } } }
/// <summary> /// Updates the monitor with a new state of the vehicle /// </summary> /// <param name="StateMonitor"></param> public void Update(QueueingUpdate update, double ts) { if (update == QueueingUpdate.NotQueueing) { if (this.Queuing == QueuingState.Failed && this.NotQueuingTimer.ElapsedMilliseconds / 1000.0 > 7.0) this.QueuingTime = Math.Min(this.QueuingTime + 10.0, this.MaximumQueuingTime); else if(this.TimeStopped > (3.0/4.0) * this.QueuingTime) this.QueuingTime = Math.Min(this.QueuingTime + 5.0, this.MaximumQueuingTime); if (!this.NotQueuingTimer.IsRunning) this.NotQueuingTimer.Start(); else if (this.NotQueuingTimer.ElapsedMilliseconds / 1000.0 > QueuingTime) this.QueuingTime = Math.Max(this.QueuingTime, Math.Min(this.NotQueuingTimer.ElapsedMilliseconds / 1000.0, this.MaximumQueuingTime / 2.0)); this.Reset(); } else { if (this.NotQueuingTimer.IsRunning) this.NotQueuingTimer.Stop(); if (!this.StartedTimer) { this.StartedTimer = true; this.StoppedTimestamp = ts; } if (Queuing == QueuingState.Normal) { TimeStopped = ts - StoppedTimestamp; if (TimeStopped > QueuingTime) Queuing = QueuingState.Failed; } else { TimeStopped = ts - StoppedTimestamp; } } }