Exemple #1
0
        /// <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 { }
        }
Exemple #2
0
        /// <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
                {
                }
            }
        }