// GET: AirRoutes/Edit/5 public ActionResult Edit(Guid?id) { if (id == Guid.Empty) { return(new HttpStatusCodeResult(HttpStatusCode.BadRequest)); } AirRoute airRoute = db.AirRoutes.FirstOrDefault(p => p.PublicId == id); if (airRoute == null) { return(HttpNotFound()); } AirRouteFormModel model = new AirRouteFormModel() { AirLineId = airRoute.AirLineId, StartAirportCode = airRoute.StartAirportCode, FinishAirportCode = airRoute.FinishAirportCode }; ViewBag.AirLineId = new SelectList(db.AirLines, "AirLineId", "Name", model.AirLineId); ViewBag.StartAirPortCode = new SelectList(db.Airports, "Code", "Name", model.StartAirportCode); ViewBag.FinishAirPortCode = new SelectList(db.Airports, "Code", "Name", model.FinishAirportCode); return(View(model)); }
public ActionResult Edit(Guid?id, [Bind(Include = "AirLineId,StartAirportCode,FinishAirportCode")] AirRouteFormModel request) { try { ViewBag.AirLineId = new SelectList(db.AirLines, "AirLineId", "Name", request.AirLineId); ViewBag.StartAirPortCode = new SelectList(db.Airports, "Code", "Name", request.StartAirportCode); ViewBag.FinishAirPortCode = new SelectList(db.Airports, "Code", "Name", request.FinishAirportCode); if (id == Guid.Empty) { return(new HttpStatusCodeResult(HttpStatusCode.BadRequest)); } if (ModelState.IsValid) { if (request.StartAirportCode.Equals(request.FinishAirportCode)) { return(View(request)); } if (!db.AirLines.Where(p => p.AirLineId == request.AirLineId).Any() || !db.Airports.Where(p => p.Code.Equals(request.StartAirportCode)).Any() || !db.Airports.Where(p => p.Code.Equals(request.FinishAirportCode)).Any()) { return(View(request)); } AirRoute airRoute = db.AirRoutes.FirstOrDefault(p => p.PublicId == id); if (airRoute == null) { return(HttpNotFound()); } airRoute.AirLineId = request.AirLineId; airRoute.AirLine = db.AirLines.Find(request.AirLineId); airRoute.StartAirportCode = request.StartAirportCode; airRoute.FinishAirportCode = request.FinishAirportCode; db.Entry(airRoute).State = EntityState.Modified; db.SaveChanges(); return(RedirectToAction("Index")); } return(View(request)); } catch (Exception e) { ViewBag.AirLineId = new SelectList(db.AirLines, "AirLineId", "Name", request.AirLineId); ViewBag.StartAirPortCode = new SelectList(db.Airports, "Code", "Name", request.StartAirportCode); ViewBag.FinishAirPortCode = new SelectList(db.Airports, "Code", "Name", request.FinishAirportCode); return(View(request)); } }
//Determines which airroute the airplane is on for In-transit planes. public AirRoute GetRoute(int airRouteID) { AirRoute currRoute = null; foreach (AirRoute ar in m_airport.Routes) { if (airRouteID == ar.AirRouteID) { currRoute = ar; } } return(currRoute); }
public ActionResult DeleteConfirmed(Guid id) { if (id == Guid.Empty) { return(new HttpStatusCodeResult(HttpStatusCode.BadRequest)); } AirRoute airRoute = db.AirRoutes.Include(p => p.AirLine).FirstOrDefault(p => p.PublicId == id); airRoute.IsActive = false; db.Entry(airRoute).State = EntityState.Modified; db.SaveChanges(); return(RedirectToAction("Index")); }
/// <summary> /// Updates a plane's state to take off and moves it into the departed queue /// </summary> /// <param name="airplane">the airplane that is taking off</param> private void TakeOff(Airplane airplane) { //pick the next route, update the airplane object and switch it into the departed queue airplane.simTime = airplane.simTime + 15; AirRoute route = m_Airport.DepartingRouteList.Peek(); m_Airport.DepartingRouteList.Enqueue(m_Airport.DepartingRouteList.Dequeue()); airplane.fuel = (route.distanceKM / airplane.cruisingKPH) * airplane.fuelConsPerHour * 1.15; airplane.distanceAlongRoute = 0; airplane.timeLanded = -1; airplane.currentAirRoute = route; airplane.currentAirRouteID = route.airRouteID; airplane.state = PlaneState.InTransit; airplane.currentAirportID = -1; }
public ActionResult Create([Bind(Include = "AirLineId,StartAirportCode,FinishAirportCode")] AirRouteFormModel request) { try { ViewBag.AirLineId = new SelectList(db.AirLines, "AirLineId", "Name", request.AirLineId); ViewBag.StartAirportCode = new SelectList(db.Airports, "Code", "Name", request.StartAirportCode); ViewBag.FinishAirportCode = new SelectList(db.Airports, "Code", "Name", request.FinishAirportCode); if (ModelState.IsValid) { if (request.StartAirportCode.Equals(request.FinishAirportCode)) { return(View(request)); } if (!db.AirLines.Where(p => p.AirLineId == request.AirLineId).Any() || !db.Airports.Where(p => p.Code.Equals(request.StartAirportCode)).Any() || !db.Airports.Where(p => p.Code.Equals(request.FinishAirportCode)).Any()) { return(View(request)); } AirRoute airRoute = new AirRoute() { PublicId = Guid.NewGuid(), AirLineId = request.AirLineId, AirLine = db.AirLines.Find(request.AirLineId), StartAirportCode = request.StartAirportCode, FinishAirportCode = request.FinishAirportCode, IsActive = true }; db.AirRoutes.Add(airRoute); db.SaveChanges(); return(RedirectToAction("Index")); } return(View(request)); }catch { ViewBag.AirLineId = new SelectList(db.AirLines, "AirLineId", "Name", request.AirLineId); ViewBag.StartAirportCode = new SelectList(db.Airports, "Code", "Name", request.StartAirportCode); ViewBag.FinishAirportCode = new SelectList(db.Airports, "Code", "Name", request.FinishAirportCode); return(View(request)); } }
// GET: AirRoutes/Delete/5 public ActionResult Delete(Guid?id) { if (id == Guid.Empty) { return(new HttpStatusCodeResult(HttpStatusCode.BadRequest)); } AirRoute airRoute = db.AirRoutes.FirstOrDefault(p => p.PublicId == id); if (airRoute == null) { return(HttpNotFound()); } AirRouteViewModel model = new AirRouteViewModel() { AirLine = airRoute.AirLine, StartAirport = airRoute.StartAirportCode, FinishAirport = airRoute.FinishAirportCode }; return(View(model)); }
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { string rtn = ""; int val = (int)value; AirRoute route = null; if (val != -1 && val != 0) { foreach (AirRoute ar in m_routes) //Find the route the plane is on. { if (val == ar.AirRouteID) { route = ar; } } if (route != null) { rtn = m_airports[route.FromAirportID - 1].Name + " to " + m_airports[route.ToAirportID - 1].Name; } } return(rtn); }
[MethodImpl(MethodImplOptions.Synchronized)] //Alters state of simulation, therefore access synchronized. public void Step() { try { Airplane outgoing = null; //Next plane to takeoff. Airplane incoming = null; //Next plane to land. AirRoute currRoute = null; //Airplanes current AirRoute. Airplane ap; //Current airplane of loop. double currRouteDist; for (int i = m_airport.Airplanes.Count - 1; i >= 0; i--) //Reverse for loop used because airplanes are removed from list. { ap = m_airport.Airplanes[i]; switch (ap.State) { case 'I': //In transit ap.Fuel -= (ap.FuelConsPerHour / 4.0); //Decrement fuel. ap.DistanceAlongRoute += (ap.CruisingKPH / 4.0); //Increment distance along route. currRoute = GetRoute(ap.CurrentAirRouteID); //Get airplane's current route. if (currRoute != null) { if (ap.DistanceAlongRoute >= currRoute.DistanceKM) //If reached airport pass control. { ap.DistanceAlongRoute = currRoute.DistanceKM; ap.State = 'C'; m_ATCBiz.PassControl(ap, currRoute.ToAirportID); m_airport.Airplanes.Remove(ap); } else if (ap.DistanceAlongRoute + 300.0 >= currRoute.DistanceKM) //If within 300km of airport pass control. { ap.State = 'E'; m_ATCBiz.PassControl(ap, currRoute.ToAirportID); m_airport.Airplanes.Remove(ap); } } else { System.Console.WriteLine("Error: No assigned route for In Transit Airplane " + ap.AirplaneID); //Should never reach this state. } currRoute = null; //Reset. break; case 'E': //Entering circling SelectLanding(ap, ref incoming); //Test if this plane should land next. ap.Fuel -= (ap.FuelConsPerHour / 4.0); //Decrement fuel. ap.DistanceAlongRoute += (ap.CruisingKPH / 4.0); //Increment distance along route. currRouteDist = m_ATCBiz.GetRouteDist(ap.CurrentAirRouteID); //Get airplane's current route. if (ap.Fuel <= 0.0) //Test if crashed. { ap.Fuel = 0.0; ap.State = 'X'; } else if (currRouteDist != 0) { if (ap.DistanceAlongRoute >= currRouteDist) //Can either land this time step (From Entering Circling state) or start Circling. { ap.DistanceAlongRoute = currRouteDist; ap.State = 'C'; //Set to Circling in case plane can't land this time step. } } else { System.Console.WriteLine("Error: No assigned route for Entering Circling Airplane " + ap.AirplaneID); //Should never reach this state. } break; case 'C': //Circling SelectLanding(ap, ref incoming); //Test if this plane should land next. ap.Fuel -= (ap.FuelConsPerHour / 4.0); //Decrement fuel. if (ap.Fuel <= 0.0) //Test if crashed. { ap.Fuel = 0.0; ap.State = 'X'; } break; case 'L': //Landed if (ap.TimeLanded >= 60) //If refuelled. { if (outgoing != null) { if (ap.TimeLanded > outgoing.TimeLanded) { outgoing = ap; //Select airplane thats been waiting the longest. } } else { outgoing = ap; } } ap.TimeLanded += 15; //Increment time landed. break; case 'X': //Crashed break; //Ignore. No processing required. default: //Should never reach this. System.Console.WriteLine("Airplane " + ap.AirplaneID + " in unexpected state: " + ap.State); break; } } //Finished updating planes status. Now process planes selected to take off & land. if (outgoing != null) //If a plane has been selected to take off. { outgoing.State = 'I'; //Set to In transit and update values. outgoing.DistanceAlongRoute = 0; outgoing.CurrentAirRouteID = m_airport.Routes[m_airport.NextRoute].AirRouteID; outgoing.CurrentAirportID = -1; outgoing.TimeLanded = -1; outgoing.Fuel = (m_airport.Routes[m_airport.NextRoute].DistanceKM / outgoing.CruisingKPH) * outgoing.FuelConsPerHour * 1.15; if (m_airport.Routes[m_airport.NextRoute].DistanceKM <= 300) //If airport within 300km then pass control (Unlikely). { m_ATCBiz.PassControl(outgoing, m_airport.Routes[m_airport.NextRoute].ToAirportID); m_airport.Airplanes.Remove(outgoing); } if (m_airport.NextRoute + 2 > m_airport.Routes.Count) { m_airport.NextRoute = 0; //Set next airroute. } else { m_airport.NextRoute += 1; } } if (incoming != null) //If a plane has been selected to land. { incoming.State = 'L'; //Set to Landed and update values. incoming.CurrentAirRouteID = -1; incoming.DistanceAlongRoute = -1; incoming.CurrentAirportID = m_airport.AirportID; incoming.TimeLanded = 0; } } catch (FaultException ex) //SOAP fault. { System.Console.WriteLine(ex.Message); } catch (CommunicationException ex) //Communication error. { System.Console.WriteLine("Can't connect to Server"); System.Console.WriteLine(ex.Message); } catch (TimeoutException ex) //Server likely has died or halted. { System.Console.WriteLine("Server timed out"); System.Console.WriteLine(ex.Message); } catch (Exception ex) //Generic exception for unknown problem. { System.Console.WriteLine("Exception type: " + ex.GetType()); System.Console.WriteLine("Exception message: " + ex.Message); } }
public void incrementSlaveAirport() { Queue <Airplane> tempPlaneQueue = new Queue <Airplane>(); //increment 15 minutes for landedQueue if (slaveAirport.landedQueue.Peek() != null) { //increase on ground time foreach (Airplane airplane1 in slaveAirport.landedQueue) { Airplane tempairplane = slaveAirport.landedQueue.Dequeue(); tempairplane.groundedTime = tempairplane.groundedTime + 15; tempPlaneQueue.Enqueue(tempairplane); } //check if airport has availabe depature routes to assign if (slaveAirport.departingRouteQueue.Peek() != null) { AirRoute nextroute = slaveAirport.departingRouteQueue.Dequeue(); //assign a route, refill fuel and change state of next departing plane Airplane departingPlane = tempPlaneQueue.Dequeue(); departingPlane.AirRouteID = nextroute.AirRouteID; departingPlane.totaldistance = nextroute.routeDistance; departingPlane.distanceleft = nextroute.routeDistance; double timeforroute = (departingPlane.totaldistance / departingPlane.cruisingkmph); departingPlane.fuel = 1.15 * (departingPlane.fuelConsPerHour * timeforroute); departingPlane.planeState = "Transit"; departingPlane.groundedTime = 0; //add to transit list slaveAirport.transitList.Add(departingPlane); } } //check if transitList is empty if (slaveAirport.transitList.Count != 0) { int listcount = slaveAirport.transitList.Count; //update details for transit plane for changes happened in 15 minutes for (int x = 0; x < listcount; x++) { slaveAirport.transitList[0].flightTime = slaveAirport.transitList[0].flightTime + 15; slaveAirport.transitList[0].kmSoFar = (slaveAirport.transitList[0].cruisingkmph) * (slaveAirport.transitList[0].flightTime / 60); slaveAirport.transitList[0].distanceleft = slaveAirport.transitList[0].totaldistance - slaveAirport.transitList[0].kmSoFar; slaveAirport.transitList[0].fuel = slaveAirport.transitList[0].fuel - (slaveAirport.transitList[0].fuelConsPerHour * (15 / 60)); } //transfer nessesary flights to entering list of destination when distance left is within 300km } //check if enteringList is empty if (slaveAirport.enteringList.Count != 0) { int listcount = slaveAirport.enteringList.Count; //update details for transit plane for changes happened in 15 minutes for (int x = 0; x < listcount; x++) { slaveAirport.enteringList[0].flightTime = slaveAirport.enteringList[0].flightTime + 15; slaveAirport.enteringList[0].kmSoFar = (slaveAirport.enteringList[0].cruisingkmph) * (slaveAirport.enteringList[0].flightTime / 60); slaveAirport.enteringList[0].distanceleft = slaveAirport.enteringList[0].totaldistance - slaveAirport.enteringList[0].kmSoFar; slaveAirport.enteringList[0].fuel = slaveAirport.enteringList[0].fuel - (slaveAirport.enteringList[0].fuelConsPerHour * (15 / 60)); } //transfer nessesary flights to circling list of destination when distance left is 0 } //check if circlingList is empty if (slaveAirport.circlingList.Count != 0) { int listcount = slaveAirport.circlingList.Count; //update details for transit plane for changes happened in 15 minutes for (int x = 0; x < listcount; x++) { slaveAirport.circlingList[0].flightTime = slaveAirport.circlingList[0].flightTime + 15; slaveAirport.circlingList[0].fuel = slaveAirport.circlingList[0].fuel - (slaveAirport.circlingList[0].fuelConsPerHour * (15 / 60)); } //transfer crashed flights to crashlist //transfer lowest fueled flight to landedlist of destination } }