예제 #1
0
        /// <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;
            }
        }
예제 #2
0
        /// <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);
            }
        }