Route request being made (Needs polling)
This commit is contained in:
parent
16543d9c64
commit
0f96994773
@ -1,5 +1,6 @@
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
using System;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
using System.Net.Http;
|
using System.Net.Http;
|
||||||
@ -35,9 +36,18 @@ namespace EFB.Controllers.API
|
|||||||
|
|
||||||
string resultString = result.Content.ReadAsStringAsync().Result;
|
string resultString = result.Content.ReadAsStringAsync().Result;
|
||||||
|
|
||||||
|
object response;
|
||||||
|
|
||||||
|
//Assess return value (object or raw string)
|
||||||
|
try{
|
||||||
|
response = JsonConvert.DeserializeObject<T>(resultString);
|
||||||
|
}catch {
|
||||||
|
response = resultString;
|
||||||
|
}
|
||||||
|
|
||||||
return new ResponseModel{
|
return new ResponseModel{
|
||||||
//Sender should be aware of type T becuase of Generic function
|
//Sender should be aware of type T becuase of Generic function
|
||||||
Result = JsonConvert.DeserializeObject<T>(resultString)
|
Result = response
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
catch (System.Exception e)
|
catch (System.Exception e)
|
||||||
@ -70,10 +80,17 @@ namespace EFB.Controllers.API
|
|||||||
var pendingResult = this.HttpClient.PostAsync(Endpoint, Body);
|
var pendingResult = this.HttpClient.PostAsync(Endpoint, Body);
|
||||||
var result = await pendingResult;
|
var result = await pendingResult;
|
||||||
string resultString = result.Content.ReadAsStringAsync().Result;
|
string resultString = result.Content.ReadAsStringAsync().Result;
|
||||||
|
|
||||||
|
object response = resultString;
|
||||||
|
|
||||||
return new ResponseModel{
|
if (typeof(T) != typeof(string))
|
||||||
|
{//If the user requests string for return type
|
||||||
|
response = JsonConvert.DeserializeObject<T>(resultString);
|
||||||
|
}
|
||||||
|
|
||||||
|
return new ResponseModel(){
|
||||||
//Sender should be aware of type T becuase of Generic function
|
//Sender should be aware of type T becuase of Generic function
|
||||||
Result = JsonConvert.DeserializeObject<T>(resultString)
|
Result = response
|
||||||
};
|
};
|
||||||
}catch(System.Exception e){
|
}catch(System.Exception e){
|
||||||
return new ResponseModel{Error = e.Message};
|
return new ResponseModel{Error = e.Message};
|
||||||
|
@ -37,7 +37,7 @@ namespace EFB.Controllers.Form
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static bool ValidateCruiseAlt(int CruiseAlt){
|
public static bool ValidateCruiseAlt(uint CruiseAlt){
|
||||||
if (CruiseAlt > 0 && CruiseAlt < 50000)
|
if (CruiseAlt > 0 && CruiseAlt < 50000)
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
|
@ -1,13 +1,17 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Diagnostics;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Text;
|
||||||
|
using System.Net.Http;
|
||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
using Microsoft.AspNetCore.Http;
|
using Microsoft.AspNetCore.Http;
|
||||||
|
using Newtonsoft.Json;
|
||||||
using EFB.Models;
|
using EFB.Models;
|
||||||
|
using EFB.Models.JSON;
|
||||||
using EFB.Sessions;
|
using EFB.Sessions;
|
||||||
|
using EFB.Controllers.Form;
|
||||||
|
using EFB.Controllers.API;
|
||||||
|
|
||||||
namespace EFB.Controllers
|
namespace EFB.Controllers
|
||||||
{
|
{
|
||||||
@ -23,8 +27,8 @@ namespace EFB.Controllers
|
|||||||
public IActionResult Index()
|
public IActionResult Index()
|
||||||
{
|
{
|
||||||
//Check the user has a valid login
|
//Check the user has a valid login
|
||||||
UserModel User = HttpContext.Session.GetObject<UserModel>("User");
|
UserModel user = HttpContext.Session.GetObject<UserModel>("User");
|
||||||
if (User == null || User.Route != null || User.Token.IsExpired())
|
if (user == null || user.Route != null || user.Token.IsExpired())
|
||||||
{
|
{
|
||||||
return RedirectToAction("Index", "Home");
|
return RedirectToAction("Index", "Home");
|
||||||
}
|
}
|
||||||
@ -37,5 +41,64 @@ namespace EFB.Controllers
|
|||||||
{
|
{
|
||||||
return View("Error!");
|
return View("Error!");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public async Task<IActionResult> New(string departure, string arrival, string cruise){
|
||||||
|
UserModel user = HttpContext.Session.GetObject<UserModel>("User");
|
||||||
|
if (!(user == null || user.Token.IsExpired()))
|
||||||
|
{//If the user is still authenticated
|
||||||
|
if (FormAuthenticator.ValidateICAOCode(departure) && FormAuthenticator.ValidateICAOCode(arrival))
|
||||||
|
{//If the user has entered valid ICAOs
|
||||||
|
|
||||||
|
uint cruiseAlt;
|
||||||
|
|
||||||
|
if (uint.TryParse(cruise, out cruiseAlt) && FormAuthenticator.ValidateCruiseAlt(cruiseAlt))
|
||||||
|
{//If the cruise altitude if within limits.
|
||||||
|
|
||||||
|
//Submit route request...
|
||||||
|
APIInterface API = new APIInterface();
|
||||||
|
|
||||||
|
//Prepare data to be send off with request (route)
|
||||||
|
Dictionary<string, string> headerData = new Dictionary<string, string>();
|
||||||
|
headerData.Add("Authorization", $"Bearer {user.Token.TokenValue}");
|
||||||
|
|
||||||
|
RouteRequest routeRequest = new RouteRequest(){
|
||||||
|
departure = departure,
|
||||||
|
destination = arrival,
|
||||||
|
preferredminlevel = cruiseAlt / 1000,
|
||||||
|
preferredmaxlevel = cruiseAlt / 1000,
|
||||||
|
};
|
||||||
|
StringContent content = new StringContent(JsonConvert.SerializeObject(routeRequest), Encoding.UTF8, "application/json");
|
||||||
|
|
||||||
|
//Make initial Route Request
|
||||||
|
var requestRoute = API.Post<string>("https://api.autorouter.aero/v1.0/router", headerData, content);
|
||||||
|
|
||||||
|
ResponseModel responseRoute = await requestRoute;
|
||||||
|
|
||||||
|
if (responseRoute.Error == null)
|
||||||
|
{//Update User session and add route ID
|
||||||
|
RouteModel route = new RouteModel(){
|
||||||
|
RouteID = responseRoute.Result.ToString()
|
||||||
|
};
|
||||||
|
|
||||||
|
user.Route = route;
|
||||||
|
HttpContext.Session.SetObject("User", user);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
TempData["Error"] = responseRoute.Error;
|
||||||
|
return RedirectToAction("Index", "Route");
|
||||||
|
|
||||||
|
}
|
||||||
|
TempData["Error"] = "Invalid Cruise Altitude";
|
||||||
|
TempData["Departure"] = departure;
|
||||||
|
TempData["Arrival"] = arrival;
|
||||||
|
return RedirectToAction("Index", "Route");
|
||||||
|
|
||||||
|
}
|
||||||
|
TempData["Error"] = "Invalid Departure or Arrival ICAO";
|
||||||
|
return RedirectToAction("Index", "Route");
|
||||||
|
}
|
||||||
|
return RedirectToAction("Index", "Home");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -65,7 +65,7 @@ namespace EFB.Controllers
|
|||||||
UserModel user = new UserModel{
|
UserModel user = new UserModel{
|
||||||
EMail = email,
|
EMail = email,
|
||||||
Token = new TokenModel{
|
Token = new TokenModel{
|
||||||
Token = login.access_token,
|
TokenValue = login.access_token,
|
||||||
Expiration = DateTime.UtcNow.AddSeconds(login.expires_in)
|
Expiration = DateTime.UtcNow.AddSeconds(login.expires_in)
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
18
Models/JSON/RouteRequest.cs
Normal file
18
Models/JSON/RouteRequest.cs
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
using Newtonsoft.Json;
|
||||||
|
|
||||||
|
namespace EFB.Models.JSON
|
||||||
|
{
|
||||||
|
public class RouteRequest
|
||||||
|
{
|
||||||
|
[JsonProperty]
|
||||||
|
public string departure { get; set; }
|
||||||
|
[JsonProperty]
|
||||||
|
public string destination { get; set; }
|
||||||
|
[JsonProperty]
|
||||||
|
public uint preferredminlevel { get; set; }
|
||||||
|
[JsonProperty]
|
||||||
|
public uint preferredmaxlevel { get; set; }
|
||||||
|
[JsonProperty]
|
||||||
|
public string optimise { get; } = "preferred";
|
||||||
|
}
|
||||||
|
}
|
@ -13,7 +13,9 @@ namespace EFB.Models
|
|||||||
|
|
||||||
Route only becomes populated after route is recieved from autorouter API
|
Route only becomes populated after route is recieved from autorouter API
|
||||||
*/
|
*/
|
||||||
public WaypointModel Departure { get; init; } = null;
|
public string RouteID { get; init; }
|
||||||
|
|
||||||
|
public WaypointModel Departure { get; set; } = null;
|
||||||
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;
|
||||||
|
@ -10,7 +10,7 @@ namespace EFB.Models
|
|||||||
/*
|
/*
|
||||||
Auto Router API Token Model
|
Auto Router API Token Model
|
||||||
*/
|
*/
|
||||||
public string Token { get; init; }
|
public string TokenValue { get; init; }
|
||||||
public DateTime Expiration { get; init; }
|
public DateTime Expiration { get; init; }
|
||||||
|
|
||||||
public bool IsExpired(){
|
public bool IsExpired(){
|
||||||
|
Loading…
Reference in New Issue
Block a user