// 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));
            }
        }
Beispiel #3
0
        //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"));
        }
Beispiel #5
0
        /// <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));
        }
Beispiel #8
0
        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);
        }
Beispiel #9
0
        [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
            }
        }