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); }
/// <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; } }
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); }
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."); }
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); }