/// <summary> /// Updates the element to the specified time. /// </summary> /// <param name="lastTime">The time before the update.</param> /// <param name="currentTime">The time to update to.</param> public override void Update(double lastTime, double currentTime) { // Check whether a change has to happen if (currentTime > _nextChange) { // Handle pod storage managers if (_config.ExchangePodStorage) { // Select next manager PodStorageMethodType nextPodManagerType = _podManagers[Instance.Randomizer.NextInt(_podManagers.Count)]; PodStorageManager newPodStorageManager; // Prepare it switch (nextPodManagerType) { case PodStorageMethodType.Nearest: { Instance.ControllerConfig.PodStorageConfig = new NearestPodStorageConfiguration(); newPodStorageManager = new NearestPodStorageManager(Instance); } break; case PodStorageMethodType.StationBased: { Instance.ControllerConfig.PodStorageConfig = new StationBasedPodStorageConfiguration(); newPodStorageManager = new StationBasedPodStorageManager(Instance); } break; case PodStorageMethodType.Random: { Instance.ControllerConfig.PodStorageConfig = new RandomPodStorageConfiguration(); newPodStorageManager = new RandomPodStorageManager(Instance); } break; case PodStorageMethodType.Turnover: { Instance.ControllerConfig.PodStorageConfig = new TurnoverPodStorageConfiguration(); newPodStorageManager = new TurnoverPodStorageManager(Instance); } break; default: throw new ArgumentException("Unknown pod storage manager: " + nextPodManagerType); } // Change it Instance.Controller.ExchangePodStorageManager(newPodStorageManager); } // Set next change event _nextChange += _config.ChangeTimeout; } }
/// <summary> /// Updates the element to the specified time. /// </summary> /// <param name="lastTime">The time before the update.</param> /// <param name="currentTime">The time to update to.</param> public override void Update(double lastTime, double currentTime) { // Check whether a change has to happen if (_podStorageManagerQueue.Any() && currentTime > TranslateTime(_podStorageManagerQueue.First().Key)) { // --> Handle pod storage managers // Get next manager PodStorageMethodType nextPodManagerType = _podStorageManagerQueue.Dequeue().Value; PodStorageManager newPodStorageManager; // Prepare it switch (nextPodManagerType) { case PodStorageMethodType.Nearest: { Instance.ControllerConfig.PodStorageConfig = new NearestPodStorageConfiguration(); newPodStorageManager = new NearestPodStorageManager(Instance); } break; case PodStorageMethodType.StationBased: { Instance.ControllerConfig.PodStorageConfig = new StationBasedPodStorageConfiguration(); newPodStorageManager = new StationBasedPodStorageManager(Instance); } break; case PodStorageMethodType.Random: { Instance.ControllerConfig.PodStorageConfig = new RandomPodStorageConfiguration(); newPodStorageManager = new RandomPodStorageManager(Instance); } break; case PodStorageMethodType.Turnover: { Instance.ControllerConfig.PodStorageConfig = new TurnoverPodStorageConfiguration(); newPodStorageManager = new TurnoverPodStorageManager(Instance); } break; case PodStorageMethodType.Fixed: throw new ArgumentException("Cannot switch to fixed mechanism, because the system is already running!"); default: throw new ArgumentException("Unknown pod storage manager: " + nextPodManagerType); } // Change it Instance.Controller.ExchangePodStorageManager(newPodStorageManager); } }