Several changes - updated string to route to include coordinates - updated model for flight sim to only contain the closest point - User model now tracks route status... departure etc

This commit is contained in:
Luke Else 2022-02-18 20:38:45 +00:00
parent 10af903706
commit 5316df08a5
9 changed files with 58 additions and 23 deletions

View File

@ -28,11 +28,13 @@ namespace EFB.Controllers
if(user == null) return RedirectToAction("Index", "Home"); if(user == null) return RedirectToAction("Index", "Home");
//Retrieve the user's latest sim position and construct it into FlightsimModel //Retrieve the user's latest sim position and construct it into FlightsimModel
if (user.Route == null) return RedirectToAction("Index", "Route");
SimPositionModel latestPosition = await Mongo.GetLatestData(user.EMail); SimPositionModel latestPosition = await Mongo.GetLatestData(user.EMail);
// RouteModel route = RouteModel.StringToRoute(); RouteModel route = await RouteModel.StringToRoute(user.Departure, user.Arrival, user.Cruise, user.Route);
return View(new FlightsimModel(latestPosition, null));
return View();
} }
[ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)] [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]

View File

@ -144,7 +144,7 @@ namespace EFB.Controllers
foreach (var item in responsePoll.Result) foreach (var item in responsePoll.Result)
{ {
if (item.Command == "fpl" || item.Command == "solution") if (item.Command == "notvalid" || item.Command == "solution")
{ {
collected = true; collected = true;
routeString = item.FlightPlan; routeString = item.FlightPlan;
@ -177,6 +177,7 @@ namespace EFB.Controllers
user.Route = finalRoute; user.Route = finalRoute;
user.Departure = departure; user.Departure = departure;
user.Arrival = arrival; user.Arrival = arrival;
user.Cruise = cruise;
HttpContext.Session.SetObject("User", user); HttpContext.Session.SetObject("User", user);
return RedirectToAction("Index", "Route"); return RedirectToAction("Index", "Route");

View File

@ -2,17 +2,18 @@ using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
using EFB.Models.Route;
namespace EFB.Models namespace EFB.Models
{ {
public class FlightsimModel public class FlightsimModel
{ {
public SimPositionModel CurrentPosition { get; set; } public SimPositionModel CurrentPosition { get; set; }
public RouteModel Route { get; set; } public IWaypoint Closest { get; set; }
public FlightsimModel(SimPositionModel position, RouteModel route) public FlightsimModel(SimPositionModel position, IWaypoint closest)
{ {
CurrentPosition = position; CurrentPosition = position;
Route = route; Closest = closest;
} }
} }
} }

View File

@ -8,8 +8,8 @@ namespace EFB.Models.Route
public interface IWaypoint public interface IWaypoint
{ {
public string Name { get; set; } public string Name { get; set; }
public string Longitude { get; set; } public float Longitude { get; set; }
public string Latitude { get; set; } public float Latitude { get; set; }
public string Airway { get; set; } public string Airway { get; set; }
public IWaypoint Next { get; set; } public IWaypoint Next { get; set; }

View File

@ -8,8 +8,8 @@ namespace EFB.Models.Route
public class NavaidModel:IWaypoint public class NavaidModel:IWaypoint
{ {
public string Name { get; set; } public string Name { get; set; }
public string Longitude { get; set; } public float Longitude { get; set; }
public string Latitude { get; set; } public float Latitude { get; set; }
public int Frequency { get; set; } public int Frequency { get; set; }
public string Airway { get; set; } public string Airway { get; set; }
@ -17,9 +17,11 @@ namespace EFB.Models.Route
public IWaypoint Previous { get; set; } = null; public IWaypoint Previous { get; set; } = null;
public bool Visited { get; set; } = false; public bool Visited { get; set; } = false;
public NavaidModel(string name, string airway){ public NavaidModel(string name, string airway, float longitude, float latitude){
Name = name; Name = name;
Airway = airway; Airway = airway;
Longitude = longitude;
Latitude = latitude;
} }
} }
} }

View File

@ -8,17 +8,19 @@ namespace EFB.Models.Route
public class WaypointModel:IWaypoint public class WaypointModel:IWaypoint
{ {
public string Name { get; set; } public string Name { get; set; }
public string Longitude { get; set; } public float Longitude { get; set; }
public string Latitude { get; set; } public float Latitude { get; set; }
public string Airway { get; set; } public string Airway { get; set; }
public IWaypoint Next { get; set; } = null; public IWaypoint Next { get; set; } = null;
public IWaypoint Previous { get; set; } = null; public IWaypoint Previous { get; set; } = null;
public bool Visited { get; set; } public bool Visited { get; set; }
public WaypointModel(string name, string airway){ public WaypointModel(string name, string airway, float longitude, float latitude){
Name = name; Name = name;
Airway = airway; Airway = airway;
Longitude = longitude;
Latitude = latitude;
} }
} }

View File

@ -19,15 +19,15 @@ namespace EFB.Models
public WaypointModel Arrival { get; set; } = null; public WaypointModel Arrival { get; set; } = null;
public IWaypoint Current { get; set; } = null; public IWaypoint Current { get; set; } = null;
public uint Cruise { get; set; } = 0; public uint Cruise { get; set; } = 0;
public RouteModel(string departure, string departureRoute, string arrival, string arrivalRoute, uint cruise){ public RouteModel(string departure, string departureRoute, string arrival, string arrivalRoute, uint cruise){
if (FormAuthenticator.ValidateICAOCode(departure)) if (FormAuthenticator.ValidateICAOCode(departure))
{ {
Departure = new WaypointModel(departure, departureRoute); Departure = new WaypointModel(departure, departureRoute, 0, 0);
} }
if (FormAuthenticator.ValidateICAOCode(arrival)) if (FormAuthenticator.ValidateICAOCode(arrival))
{ {
Arrival = new WaypointModel(arrival, arrivalRoute); Arrival = new WaypointModel(arrival, arrivalRoute, 0, 0);
} }
if (FormAuthenticator.ValidateCruiseAlt(cruise)) if (FormAuthenticator.ValidateCruiseAlt(cruise))
@ -53,7 +53,8 @@ namespace EFB.Models
} }
//Generate a route Object //Generate a route Object
public static RouteModel StringToRoute(string departure, string arrival, uint cruise, string routeString){ public static async Task<RouteModel> StringToRoute(string departure, string arrival, uint cruise, string routeString){
var navdataFetch = NavdataModel.Populate();
string[] routeTemp = routeString.Split(" "); string[] routeTemp = routeString.Split(" ");
//Set departure and arrival route //Set departure and arrival route
@ -65,17 +66,34 @@ namespace EFB.Models
route.Current = route.Departure; route.Current = route.Departure;
NavdataModel[] navdata = await navdataFetch;
navdata = NavdataModel.MergeSort(ref navdata, 0, navdata.Length - 1);
for (var i = 1; i < routeTemp.Length-1; i+=2) for (var i = 1; i < routeTemp.Length-1; i+=2)
{//Already used first item, continue itterating over every other item {//Already used first item, continue itterating over every other item
IWaypoint next; IWaypoint next;
NavdataModel currentWaypoint = NavdataModel.BinarySearch(ref navdata, 0, navdata.Length-1, routeTemp[i]);
if (currentWaypoint == null)
{
currentWaypoint = new NavdataModel(0, routeTemp[i], null, "0", "0");
}
//Populate 'next' waypoint //Populate 'next' waypoint
if (routeTemp[i].Length > 3) if (routeTemp[i].Length > 3)
{//waypoint Type {//waypoint Type
next = new WaypointModel(routeTemp[i], routeTemp[i+1]); next = new WaypointModel(
routeTemp[i],
routeTemp[i+1],
float.Parse(currentWaypoint.Longitude),
float.Parse(currentWaypoint.Latitude)
);
}else }else
{//Navaid Type {//Navaid Type
next = new NavaidModel(routeTemp[i], routeTemp[i+1]); next = new NavaidModel(
routeTemp[i],
routeTemp[i+1],
float.Parse(currentWaypoint.Longitude),
float.Parse(currentWaypoint.Latitude)
);
} }
next.Previous = route.Current; next.Previous = route.Current;
@ -90,6 +108,15 @@ namespace EFB.Models
route.Current = route.Departure; route.Current = route.Departure;
//Assign departure and arrival coordinate positions
NavdataModel departureNav = NavdataModel.BinarySearch(ref navdata, 0, navdata.Length - 1, departure);
NavdataModel arrivalNav = NavdataModel.BinarySearch(ref navdata, 0, navdata.Length - 1, arrival);
route.Departure.Latitude = float.Parse(departureNav.Latitude);
route.Departure.Longitude = float.Parse(departureNav.Longitude);
route.Arrival.Latitude = float.Parse(arrivalNav.Latitude);
route.Arrival.Latitude = float.Parse(arrivalNav.Longitude);
return route; return route;
} }

View File

@ -24,7 +24,7 @@ namespace EFB.Models
public string Departure { get; set; } public string Departure { get; set; }
public string Route { get; set; } public string Route { get; set; }
public string Arrival { get; set; } public string Arrival { get; set; }
public RouteModel RouteObject { get; set; } public uint Cruise { get; set; }
public TokenModel RouteToken { get; set; } = null; public TokenModel RouteToken { get; set; } = null;

View File

@ -35,7 +35,7 @@
<a class="nav-link text-light" asp-area="" asp-controller="Charts" asp-action="Index">Charts</a> <a class="nav-link text-light" asp-area="" asp-controller="Charts" asp-action="Index">Charts</a>
</li> </li>
<li class="nav-item"> <li class="nav-item">
<a class="nav-link text-light" asp-area="" asp-controller="" asp-action="Index">FlightSim</a> <a class="nav-link text-light" asp-area="" asp-controller="Flightsim" asp-action="Index">FlightSim</a>
</li> </li>
@{ @{