Пример #1
0
        private void UpdateDensityAndSpeed(ITrafficLight trafficLight, ITrafficData oldTrafficData,
                                           ITrafficData trafficData, double seconds)
        {
            /*if (Math.Abs(trafficData.TrafficDensity) < Epsilon)
             * {
             *  return;
             * }*/

            if (trafficLight.State == TrafficLightState.Red)
            {
                var hours      = seconds / 3600.0;
                var length     = trafficData.TrafficSpeed * 1000.0 * hours;
                var nofCars    = length / 100.0 * 25 * trafficData.TrafficDensity;
                var newDensity = oldTrafficData.TrafficDensity + nofCars / 25.0;

                /*if (newDensity > 1)
                 * {
                 *  newDensity = 1;
                 * }*/
                trafficData.TrafficDensity = newDensity;
                trafficData.TrafficSpeed   = 0.0;
            }
            else
            {
                var hours      = seconds / 3600.0;
                var length     = trafficData.TrafficSpeed * 1000.0 * hours;
                var nofCars    = length / 100.0 * 25 * trafficData.TrafficDensity;
                var newDensity = oldTrafficData.TrafficDensity - nofCars / 25.0;
                if (newDensity < trafficData.TrafficDensity)
                {
                    newDensity = trafficData.TrafficDensity;
                }
                trafficData.TrafficDensity = newDensity;
            }
        }
Пример #2
0
 private async Task ChangeDateTimeToCurrent(ITrafficLight trafficLight)
 {
     await Task.Run(() =>
     {
         trafficLight.Date = DateTime.UtcNow;
     });
 }
Пример #3
0
        public async Task InitiateTrafficLightAsync()
        {
            IDictionary <enmLightState, StateDuration> DicStateDurations = new Dictionary <enmLightState, StateDuration>();

            DicStateDurations.Add(enmLightState.Green, new StateDuration()
            {
                MinDuration = int.Parse(this.txtGreenMinDuration.Text), MaxDuration = int.Parse(this.txtGreenMaxDuration.Text)
            });
            DicStateDurations.Add(enmLightState.Red, new StateDuration()
            {
                MinDuration = int.Parse(this.txtRedMinDuration.Text), MaxDuration = int.Parse(this.txtRedMaxDuration.Text)
            });
            DicStateDurations.Add(enmLightState.Yellow, new StateDuration()
            {
                MinDuration = int.Parse(this.txtYellowMinDuration.Text), MaxDuration = int.Parse(this.txtYellowMaxDuration.Text)
            });
            DicStateDurations.Add(enmLightState.YellowRed, new StateDuration()
            {
                MinDuration = 5, MaxDuration = 5
            });

            this.trafficLight = new TrafficLight.Domain.TrafficLight(DicStateDurations);
            this.trafficLight.OnStateChanged += TrafficLight_OnStateChanged;

            RefreshState(this.trafficLight.CurrentState);
        }
Пример #4
0
        public async Task ScheduleStateChange(ITrafficLight trafficLight)
        {
            Console.WriteLine(this.color);
            await Task.Delay(TimeSpan.FromSeconds(this.durationInSeconds));

            trafficLight.SetState(this.lightFactory.GetNextState(this.color));
        }
 private void Start()
 {
     if (tlc == null)
     {
         tlc = GetComponentInParent <ITrafficLight>();
     }
 }
Пример #6
0
 /// <summary>
 /// Add traffic light to list
 /// </summary>
 /// <param name="tl">Traffic light instance</param>
 public void AddTrafficLight(ITrafficLight tl)
 {
     if (CurrentPowerLevel - tl.PowerConsumption > 0)
     {
         CurrentPowerLevel = CurrentPowerLevel - tl.PowerConsumption;
         TrafficLights.Add(tl);
     }
 }
Пример #7
0
        /// <summary>
        /// Turn off traffic light connected to power station
        /// </summary>
        /// <param name="id">Id of traffic light</param>
        public void PowerOffTrafficLightById(int id)
        {
            ITrafficLight tl = TrafficLights.Find(x => x.Id == id);

            if (tl != null)
            {
                tl.PowerOff();
            }
        }
Пример #8
0
        private double GetTrafficDataMark(ITrafficLight trafficLight, ITrafficData trafficData)
        {
            if (trafficLight.State == TrafficLightState.Green)
            {
                return(trafficData.TrafficDensity + 1 / trafficData.TrafficSpeed);
            }

            return(0.0);
        }
Пример #9
0
        /// <summary>
        /// Remove traffic light from list by id
        /// </summary>
        /// <param name="id">Id of traffic light</param>
        public void RemoveTrafficLightById(int id)
        {
            ITrafficLight tl = TrafficLights.Find(x => x.Id == id);

            if (tl != null)
            {
                tl.PowerOff();
                TrafficLights.Remove(tl);
                CurrentPowerLevel = CurrentPowerLevel + tl.PowerConsumption;
            }
        }
Пример #10
0
        protected TrafficLightDrawerBase(
            int leftOffset,
            int topOffset,
            ITrafficLight trafficLight,
            Action <Point> prepareConsoleAction)
        {
            Console.OutputEncoding = Encoding.UTF8;
            Console.CursorVisible  = false;

            _zoneOffset                      = new Point(leftOffset, topOffset);
            _trafficLight                    = trafficLight;
            _prepareConsoleAction            = prepareConsoleAction;
            _trafficLight.LightStateChanged += TrafficLightOnLightStateChanged;
        }
Пример #11
0
        /// <summary>TODO</summary>
        public static async Task <Unit> ExecuteTrafficLight <T>
            (this ITrafficLight <T> e)
        {
            e.ContractedNotNull("e");
            Contract.Ensures(Contract.Result <Task <Unit> >() != null); // not supported for async/await
            try {
                var trafficLightState = await LightStates <T> .Start(e)(e);

                while (trafficLightState != null)
                {
                    trafficLightState = await trafficLightState()(e);
                }
            } catch (OperationCanceledException) {; }
            return(Unit._);
        }
        public ITrafficLightDrawer Create(int leftOffset, int topOffset, ITrafficLight trafficLight)
        {
            switch (trafficLight.GetType().Name)
            {
            case nameof(StandartTrafficLightController):
                return(new StandartTrafficLightDrawer(leftOffset, topOffset, trafficLight));

            case nameof(PedestrianTrafficLightController):
                return(new PedestrianTrafficLightDrawer(leftOffset, topOffset, trafficLight));

            case nameof(LeftSectionStandartTrafficLightController):
                return(new LeftSectionStandartTrafficLightDrawer(leftOffset, topOffset, trafficLight));

            default:
                throw new NotSupportedException();
            }
        }
Пример #13
0
        public static void Main(string[] args)
        {
            ITrafficLightDrawerFactory factory = new TrafficLightDrawerFactory();

            var trafficLights = new ITrafficLight[]
            {
                new PedestrianTrafficLightController(10, 4),
                new StandartTrafficLightController(5, 1, 10),
                new LeftSectionStandartTrafficLightController(4, 1, 6, 3),
            };

            var drawers = trafficLights
                          .Select((tl, i) => factory.Create(4, i * 6 + 1, tl));

            foreach (var trafficLightDrawer in drawers)
            {
                trafficLightDrawer.Start();
            }

            Console.ReadLine();
        }
Пример #14
0
        private double GetMarkFromTrafficData(ITrafficLight trafficLight, ITrafficData trafficData)
        {
            /*           if (trafficLight.State == TrafficLightState.Green)
             * {
             *  if (Math.Abs(trafficData.TrafficSpeed) > 0.0001)
             *  {
             *      return trafficData.TrafficDensity + 1 / trafficData.TrafficSpeed;
             *  }
             *  else {
             *      return trafficData.TrafficDensity;
             *  }
             * }
             *
             * return 0.0;*/

            if (Math.Abs(trafficData.TrafficSpeed) > 0.0001)
            {
                return(trafficData.TrafficDensity + 1 / trafficData.TrafficSpeed);
            }
            return(trafficData.TrafficDensity);
        }
Пример #15
0
 protected virtual void AfterAdd(ITrafficLight trafficLight)
 {
 }
Пример #16
0
 public App(ITrafficLight trafficLight, IInput input, IOutput output)
 {
     _trafficLight = trafficLight;
     _input        = input;
     _output       = output;
 }
Пример #17
0
 protected override void AfterAdd(ITrafficLight trafficLight)
 {
     trafficLight.StateExpirationEvent += OnTrafficLightStateExpired;
 }
Пример #18
0
 public TrafficLightManager(ILogger logger, ITrafficLight lights)
 {
     _logger = logger;
     Lights  = lights;
 }
Пример #19
0
 public PolarTrafficLightCluster(ITrafficLight masterTrafficLight)
 {
     MasterTrafficLight = masterTrafficLight;
     masterTrafficLight.StateExpirationEvent += OnTrafficLightStateExpired;
 }
Пример #20
0
 public App(ITrafficLight trafficLight, IInput input)
 {
     _trafficLight = trafficLight;
     _input        = input;
 }
Пример #21
0
 public PedestrianTrafficLightDrawer(int leftOffset, int topOffset, ITrafficLight trafficLight)
     : base(leftOffset, topOffset, trafficLight, PrepareConsole)
 {
 }
 public LeftSectionStandartTrafficLightDrawer(int leftOffset, int topOffset, ITrafficLight trafficLight)
     : base(leftOffset, topOffset, trafficLight, PrepareConsole)
 {
 }