/// <summary> /// Update the characters FleetInfo /// </summary> private async Task UpdateFleetInfo() { if (ID == 0 || !ESILinked || ESIAuthData == null) { return; } try { ESI.NET.EsiClient esiClient = EveManager.Instance.ESIClient; esiClient.SetCharacterData(ESIAuthData); if (FleetInfo.NextFleetMembershipCheck < DateTime.Now) { // route is cached for 60s, however checking this can hit the rate limit FleetInfo.NextFleetMembershipCheck = DateTime.Now + TimeSpan.FromSeconds(240); ESI.NET.EsiResponse <ESI.NET.Models.Fleets.FleetInfo> esr = await esiClient.Fleets.FleetInfo(); if (ESIHelpers.ValidateESICall <ESI.NET.Models.Fleets.FleetInfo>(esr)) { FleetInfo.FleetID = esr.Data.FleetId; FleetInfo.IsFleetBoss = esr.Data.Role == "fleet_commander" ? true : false; } else { FleetInfo.FleetID = 0; Application.Current.Dispatcher.Invoke((Action)(() => { FleetInfo.Members.Clear(); }), DispatcherPriority.Normal); } } if (FleetInfo.FleetID != 0 && FleetInfo.IsFleetBoss) { List <long> characterIDsToResolve = new List <long>(); ESI.NET.EsiResponse <List <ESI.NET.Models.Fleets.Member> > esrf = await esiClient.Fleets.Members(FleetInfo.FleetID); if (ESIHelpers.ValidateESICall <List <ESI.NET.Models.Fleets.Member> >(esrf)) { foreach (Fleet.FleetMember ff in FleetInfo.Members) { ff.IsValid = false; } foreach (ESI.NET.Models.Fleets.Member esifm in esrf.Data) { Fleet.FleetMember fm = null; foreach (Fleet.FleetMember ff in FleetInfo.Members) { if (ff.CharacterID == esifm.CharacterId) { fm = ff; fm.IsValid = true; } } if (fm == null) { fm = new Fleet.FleetMember(); fm.IsValid = true; Application.Current.Dispatcher.Invoke((Action)(() => { FleetInfo.Members.Add(fm); }), DispatcherPriority.Normal); } EVEData.System es = EveManager.Instance.GetEveSystemFromID(esifm.SolarSystemId); fm.Name = EveManager.Instance.GetCharacterName(esifm.CharacterId); fm.Location = es.Name; fm.Region = es.Region; fm.CharacterID = esifm.CharacterId; if (EveManager.Instance.ShipTypes.ContainsKey(esifm.ShipTypeId.ToString())) { fm.ShipType = EveManager.Instance.ShipTypes[esifm.ShipTypeId.ToString()]; } else { fm.ShipType = "Unknown : " + esifm.ShipTypeId.ToString(); } if (String.IsNullOrEmpty(fm.Name)) { characterIDsToResolve.Add(esifm.CharacterId); } } if (characterIDsToResolve.Count > 0) { EveManager.Instance.ResolveCharacterIDs(characterIDsToResolve).Wait(); } foreach (Fleet.FleetMember ff in FleetInfo.Members.ToList()) { if (!ff.IsValid) { Application.Current.Dispatcher.Invoke((Action)(() => { FleetInfo.Members.Remove(ff); }), DispatcherPriority.Normal); } } } else { // something went wrong (probably lost fleet_commander), reset this check FleetInfo.NextFleetMembershipCheck = DateTime.Now + TimeSpan.FromSeconds(60); FleetInfo.FleetID = 0; Application.Current.Dispatcher.Invoke((Action)(() => { FleetInfo.Members.Clear(); }), DispatcherPriority.Normal); } } } catch { } }
/// <summary> /// Update the active route for the character /// </summary> private void UpdateActiveRoute() { if (Waypoints.Count == 0) { return; } string start = string.Empty; string end = Location; Application.Current.Dispatcher.Invoke((Action)(() => { if (Location == Waypoints[0]) { Waypoints.RemoveAt(0); } ActiveRoute.Clear(); }), DispatcherPriority.ApplicationIdle); // loop through all the waypoints and query ESI for the route for (int i = 0; i < Waypoints.Count; i++) { start = end; end = Waypoints[i]; EVEData.System startSys = EveManager.Instance.GetEveSystem(start); EVEData.System endSys = EveManager.Instance.GetEveSystem(end); UriBuilder urlBuilder = new UriBuilder(@"https://esi.evetech.net/v1/route/" + startSys.ID + "/" + endSys.ID + "/"); var esiQuery = HttpUtility.ParseQueryString(urlBuilder.Query); esiQuery["datasource"] = "tranquility"; urlBuilder.Query = esiQuery.ToString(); HttpWebRequest request = (HttpWebRequest)WebRequest.Create(urlBuilder.ToString()); request.Method = WebRequestMethods.Http.Get; request.Timeout = 20000; request.Proxy = null; try { HttpWebResponse esiResult = (HttpWebResponse)request.GetResponse(); if (esiResult.StatusCode != HttpStatusCode.OK) { return; } Stream responseStream = esiResult.GetResponseStream(); using (StreamReader sr = new StreamReader(responseStream)) { // Need to return this response string strContent = sr.ReadToEnd(); JsonTextReader jsr = new JsonTextReader(new StringReader(strContent)); while (jsr.Read()) { if (jsr.TokenType == JsonToken.StartArray) { JArray obj = JArray.Load(jsr); string[] systems = obj.ToObject <string[]>(); for (int j = 1; j < systems.Length; j++) { string sysName = EveManager.Instance.SystemIDToName[systems[j]]; Application.Current.Dispatcher.Invoke((Action)(() => { ActiveRoute.Add(sysName); }), DispatcherPriority.ApplicationIdle); } } } } } catch { } } }