public async Task <ActionResult <FlightPlan> > Get(string id) { FlightPlan p = null; if (planModel.GetAllPlans().FirstOrDefault(t => string.Compare(t.Key, id, true) == 0).Value != null) { p = planModel.GetAllPlans().FirstOrDefault(t => string.Compare(t.Key, id, true) == 0).Value; } else { try { //search this id in external servers Servers s; serverModel.GetServerToFlightDic().TryGetValue(id, out s); string url = s.ServerURL + "/api/FlightPlan/" + id; var contentt = await this.client.GetStringAsync(url); p = JsonConvert.DeserializeObject <FlightPlan>(contentt); } catch (WebException) { return(BadRequest()); } catch (Exception) { return(StatusCode(500)); } } if (p == null) { return(StatusCode(400)); } return(p); }
//[HttpGet("{id}", Name = "Get")] public async Task <ActionResult <Flight[]> > Get(string relative_to) { bool isSync = false; string s = Request.QueryString.Value; if (s.Contains("sync_all")) { isSync = true; } List <Flight> returnList = new List <Flight>(); //if its the first GET request: // return array of that: 1.externalIs=false 2. Time is now if (!isSync) { DateTime parsedDate = DateTime.Parse(relative_to); parsedDate = TimeZoneInfo.ConvertTimeToUtc(parsedDate); foreach (var f in model.GetAllFlights()) { FlightPlan p; planModel.GetAllPlans().TryGetValue(f.Value.FlightId, out p); //find the start time as appear in the initial time in the flight plan DateTime startTime = TimeZoneInfo.ConvertTimeToUtc(DateTime.Parse(p.InitialLocation.DateTime)); //update current location of flight CurrentFlightLocation(startTime, parsedDate, f.Value); DateTime endTime = CalcEndTime(startTime, f.Value); //update end time of flight f.Value.EndTime = endTime.ToString("yyyy-MM-ddTHH:mm:ssZ"); int resultAfterStart = DateTime.Compare(parsedDate, startTime); int resultBeforeEnd = DateTime.Compare(parsedDate, endTime); if ((resultAfterStart >= 0) && (resultBeforeEnd <= 0)) { if (f.Value.IsExternal == false) { returnList.Add(f.Value); } } } Flight[] array = returnList.ToArray(); return(array); } else { //Sync all: Its the second GET request: ALL flights from this time //FIRST PART - get all internal flights (flights source: drag & drop) DateTime parsedDate = DateTime.Parse(relative_to); parsedDate = TimeZoneInfo.ConvertTimeToUtc(parsedDate); foreach (var f in model.GetAllFlights()) { FlightPlan p; planModel.GetAllPlans().TryGetValue(f.Value.FlightId, out p); //find the start time as appear in the initial time in the flight plan DateTime startTime = TimeZoneInfo.ConvertTimeToUtc(DateTime.Parse(p.InitialLocation.DateTime)); //update current location of flight CurrentFlightLocation(startTime, parsedDate, f.Value); DateTime endTime = CalcEndTime(startTime, f.Value); //update end time of flight f.Value.EndTime = endTime.ToString("yyyy-MM-ddTHH:mm:ssZ"); int resultAfterStart = DateTime.Compare(parsedDate, startTime); int resultBeforeEnd = DateTime.Compare(parsedDate, endTime); if ((resultAfterStart >= 0) && (resultBeforeEnd <= 0)) { returnList.Add(f.Value); } } //second part - get all exnternal flights (flights source: other servers) bool flagIsError = false; foreach (var server in serverModel.GetAllServers()) { try { string url = server.Value.ServerURL + "/api/Flights?relative_to=" + relative_to; List <Flight> flightsFromServer; try { var contentt = await this.client.GetStringAsync(url); flightsFromServer = JsonConvert.DeserializeObject <List <Flight> >(contentt); } catch { flagIsError = true; continue; } foreach (var externalFlight in flightsFromServer) { serverModel.GetServerToFlightDic().AddOrUpdate(externalFlight.FlightId, server.Value, (oldKey, oldVal) => server.Value); externalFlight.IsExternal = true; string url2 = server.Value.ServerURL + "/api/FlightPlan/" + externalFlight.FlightId; var plan = await this.client.GetStringAsync(url2); FlightPlan planFromServer = JsonConvert.DeserializeObject <FlightPlan>(plan); DateTime startTime = TimeZoneInfo.ConvertTimeToUtc(DateTime.Parse(planFromServer.InitialLocation.DateTime)); DateTime endTime = CalcEndTimeForExternal(startTime, planFromServer); externalFlight.EndTime = endTime.ToString("yyyy-MM-ddTHH:mm:ssZ"); int resultAfterStart = DateTime.Compare(parsedDate, startTime); int resultBeforeEnd = DateTime.Compare(parsedDate, endTime); if ((resultAfterStart >= 0) && (resultBeforeEnd <= 0)) { returnList.Add(externalFlight); } } } catch (Exception e) { throw e; } } if (flagIsError) { return(BadRequest()); } Flight[] array = returnList.ToArray(); return(array); } }