Exemplo n.º 1
0
 public BeheerSector Assign(BeheerSector sector, BeheerTram tram)
 {
     sector.SetOccupyingTram(tram);
     _repo.EditTram(tram);
     _repo.EditSector(sector);
     return(sector);
 }
Exemplo n.º 2
0
        public string Unlock(string tracks, string sectors)
        {
            int[] unlockSectors = { -1 };
            int[] unlockTracks;

            try
            {
                if (!string.IsNullOrEmpty(sectors))
                {
                    unlockSectors = Parse(sectors);
                    for (var i = 0; i < unlockSectors.Length; i++)
                    {
                        unlockSectors[i] -= 1;
                    }
                }
                unlockTracks = Parse(tracks);
            }
            catch
            {
                return("De input is incorrect.");
            }

            foreach (var track in AllTracks)
            {
                if (Array.IndexOf(unlockTracks, track.Key) <= -1)
                {
                    continue;
                }
                var beheerTrack = BeheerTrack.ToBeheerTrack(track.Value);
                beheerTrack.UnlockTrack();
                _repo.EditTrack(beheerTrack);
            }

            foreach (var track in AllTracks)
            {
                if (Array.IndexOf(unlockTracks, track.Key) <= -1)
                {
                    continue;
                }
                for (var i = 0; i < track.Value.Sectors.Count - 1; i++)
                {
                    if (Array.IndexOf(unlockSectors, i) <= -1)
                    {
                        continue;
                    }
                    var beheerSector =
                        track.Value.Sectors[i] == null ? null : BeheerSector.ToBeheerSector(track.Value.Sectors[i]);
                    if (beheerSector == null)
                    {
                        continue;
                    }
                    beheerSector.UnLock();
                    _repo.EditSector(beheerSector);
                }
            }
            Update();
            return(null);
        }
Exemplo n.º 3
0
 /// <summary>
 ///     Zet alle sectoren's status op 'Open'.
 /// </summary>
 public void UnlockTrack()
 {
     for (var i = 0; i < Sectors.Count; i++)
     {
         var beheerSector = Sectors[i] == null ? null : BeheerSector.ToBeheerSector(Sectors[i]);
         beheerSector.UnLock();
         Sectors[i] = beheerSector;
     }
 }
Exemplo n.º 4
0
        public string MoveTram(int moveTram, int moveTrack, int moveSector, bool hasAccepted = false)
        {
            moveSector -= 1;

            if (!AllTrams.ContainsKey(moveTram))
            {
                return("Deze tram bestaat niet.");
            }
            var tram = AllTrams[moveTram];

            if (!hasAccepted && tram.Status != TramStatus.Idle)
            {
                return("NOT IDLE");
            }
            if (!AllTracks.ContainsKey(moveTrack))
            {
                return("Dit spoor betaat niet.");
            }
            var track = AllTracks[moveTrack];

            if (track.Sectors.Count < moveSector + 1)
            {
                return($"Spoor {track.Number} heeft zo veel secoren niet");
            }
            var sector = track.Sectors[moveSector];

            switch (sector.Status)
            {
            case SectorStatus.Locked:
                return("Deze sector is afgesloten.");

            case SectorStatus.Occupied:
                return("Deze sector is bezet.");

            case SectorStatus.Open:
            {
                var beheerSector = BeheerSector.ToBeheerSector(sector);
                if (beheerSector != null && beheerSector.SetOccupyingTram(tram))
                {
                    _repo.WipeSectorByTramId(tram.Number);
                }
                _repo.EditSector(beheerSector);
                Update();
                break;
            }

            default:
                throw new ArgumentOutOfRangeException();
            }
            return(null);
        }
Exemplo n.º 5
0
        public void AssignTramLocation(BeheerTram tram)
        {
            tram.EditTramLocation(TramLocation.In);

            //With a service needed, put on the first free slot
            if (tram.Status == TramStatus.Cleaning || tram.Status == TramStatus.Maintenance ||
                tram.Status == TramStatus.CleaningMaintenance)
            {
                foreach (Track track in _allTracks.Where(track => track.Type == TrackType.Service))
                {
                    for (var i = 0; i < track.Sectors.Count; i++)
                    {
                        if (track.Sectors[i].OccupyingTram == null && track.Sectors[i].Status == SectorStatus.Open)
                        {
                            var beheerSector = BeheerSector.ToBeheerSector(track.Sectors[i]);
                            track.Sectors[i] = Assign(beheerSector, tram);
                            Console.WriteLine("Moved tram {0} to track: {1}, sector: {2} ({3})", tram.Number,
                                              beheerSector.TrackNumber, beheerSector.Number + 1, tram.Status);
                            return;
                        }
                    }
                }
            }

            //Put tram on track thats connected to the line the tram is on
            foreach (var track in _allTracks.Where(track => track.Line == tram.Line && track.Type == TrackType.Normal))
            {
                for (var i = 0; i < track.Sectors.Count - 1; i++)
                {
                    if (track.Sectors[i].OccupyingTram == null && track.Sectors[i].Status == SectorStatus.Open)
                    {
                        var beheerSector = BeheerSector.ToBeheerSector(track.Sectors[i]);
                        track.Sectors[i] = Assign(beheerSector, tram);
                        Console.WriteLine("Moved tram {0} to track: {1}, sector: {2}", tram.Number,
                                          beheerSector.TrackNumber, beheerSector.Number + 1);
                        return;
                    }

                    if (track.Sectors[i].Status == SectorStatus.Occupied &&
                        track.Sectors[i].OccupyingTram.DepartureTime < tram.DepartureTime)
                    {
                        if (track.Sectors[i + 1].Status == SectorStatus.Open)
                        {
                            var beheerSector = BeheerSector.ToBeheerSector(track.Sectors[i + 1]);
                            track.Sectors[i + 1] = Assign(beheerSector, tram);
                            Console.WriteLine("Moved tram {0} to track: {1}, sector: {2}", tram.Number,
                                              beheerSector.TrackNumber, beheerSector.Number + 1);
                            return;
                        }
                    }
                }
            }

            //If not successful put tram on any other normal track (that doesn't have another line connected to it)
            foreach (var track in _allTracks.Where(track => track.Type == TrackType.Normal))
            {
                for (var i = 0; i < track.Sectors.Count - 1; i++)
                {
                    if (track.Sectors[0].OccupyingTram == null && track.Sectors[0].Status == SectorStatus.Open)
                    {
                        var beheerSector = BeheerSector.ToBeheerSector(track.Sectors[i]);
                        track.Sectors[i] = Assign(beheerSector, tram);
                        Console.WriteLine("Moved tram {0} to track: {1}, sector: {2}", tram.Number,
                                          beheerSector.TrackNumber, beheerSector.Number + 1);
                        return;
                    }
                    else if (track.Sectors[i].Status == SectorStatus.Occupied &&
                             track.Sectors[i].OccupyingTram.DepartureTime < tram.DepartureTime)
                    {
                        if (track.Sectors[i + 1].Status == SectorStatus.Open)
                        {
                            var beheerSector = BeheerSector.ToBeheerSector(track.Sectors[i + 1]);
                            track.Sectors[i + 1] = Assign(beheerSector, tram);
                            Console.WriteLine("Moved tram {0} to track: {1}, sector: {2}", tram.Number,
                                              beheerSector.TrackNumber, beheerSector.Number + 1);
                            return;
                        }
                    }
                }
            }

            //If not successful put on an exit line
            foreach (var track in _allTracks.Where(track => track.Type == TrackType.Exit))
            {
                for (var i = 0; i < track.Sectors.Count - 1; i++)
                {
                    if (track.Sectors[0].OccupyingTram == null && track.Sectors[0].Status == SectorStatus.Open)
                    {
                        var beheerSector = BeheerSector.ToBeheerSector(track.Sectors[i]);
                        track.Sectors[i] = Assign(beheerSector, tram);
                        Console.WriteLine("Moved tram {0} to track: {1}, sector: {2}", tram.Number,
                                          beheerSector.TrackNumber, beheerSector.Number + 1);
                        return;
                    }
                    else if (track.Sectors[i].Status == SectorStatus.Occupied &&
                             track.Sectors[i].OccupyingTram.DepartureTime < tram.DepartureTime)
                    {
                        if (track.Sectors[i + 1].Status == SectorStatus.Open)
                        {
                            var beheerSector = BeheerSector.ToBeheerSector(track.Sectors[i + 1]);
                            track.Sectors[i + 1] = Assign(beheerSector, tram);
                            Console.WriteLine("Moved tram {0} to track: {1}, sector: {2}", tram.Number,
                                              beheerSector.TrackNumber, beheerSector.Number + 1);
                            return;
                        }
                    }
                    else if (track.Sectors[i].Status == SectorStatus.Occupied &&
                             track.Sectors[0].OccupyingTram.DepartureTime == null)
                    {
                        if (track.Sectors[i + 1].Status == SectorStatus.Open)
                        {
                            var beheerSector = BeheerSector.ToBeheerSector(track.Sectors[i + 1]);
                            track.Sectors[i + 1] = Assign(beheerSector, tram);
                            Console.WriteLine("Moved tram {0} to track: {1}, sector: {2}", tram.Number,
                                              beheerSector.TrackNumber, beheerSector.Number + 1);
                            return;
                        }
                    }
                }
            }

            //If not successful let user place tram
            tram.EditTramLocation(TramLocation.NotAssigned);
            _repo.EditTram(tram);
            Console.WriteLine($"Could not move tram {tram.Number}, please move manually.");
        }
Exemplo n.º 6
0
        public string Lock(string tracks, string sectors)
        {
            int[] lockSectors = { -1 };
            int[] lockTracks;

            try
            {
                if (!string.IsNullOrEmpty(sectors))
                {
                    lockSectors = Parse(sectors);
                    for (var i = 0; i < lockSectors.Length; i++)
                    {
                        lockSectors[i] -= 1;
                    }
                }

                lockTracks = Parse(tracks);
            }
            catch
            {
                return("De input klopt niet.");
            }
            if (lockTracks[0] == -1)
            {
                return(null);
            }

            var newLockTracks = AllTracks.Where(x => lockTracks.Contains(x.Key));

            foreach (var track in newLockTracks)
            {
                var beheerTrack = BeheerTrack.ToBeheerTrack(track.Value);
                beheerTrack.LockTrack();
                _repo.EditTrack(beheerTrack);
            }


            foreach (var track in AllTracks)
            {
                if (Array.IndexOf(lockTracks, track.Key) <= -1)
                {
                    continue;
                }
                for (var i = 0; i < track.Value.Sectors.Count - 1; i++)
                {
                    if (Array.IndexOf(lockSectors, i) <= -1)
                    {
                        continue;
                    }
                    var beheerSector = track.Value.Sectors[i] == null
                        ? null
                        : BeheerSector.ToBeheerSector(track.Value.Sectors[i]);
                    if (beheerSector == null)
                    {
                        continue;
                    }
                    beheerSector.Lock();
                    _repo.EditSector(beheerSector);
                }
            }

            Update();
            return(null);
        }