Esempio n. 1
0
        public static ESIResponse <List <T> > ESIImportCrawl <T>(string route, ESI.CharacterEnum type = ESI.CharacterEnum.None, Dictionary <string, object> parms = null, int pageSize = 1000)
        {
            if (parms == null)
            {
                parms = new Dictionary <string, object>();
            }

            int page = 1;
            ESIResponse <List <T> > response = null, result = null;

            do
            {
                var myparms = new Dictionary <string, object>(parms);
                myparms.Add("page", page);
                response = StaticInfo.GetESIResponse <List <T> >(route, type, myparms);

                if (result == null)
                {
                    result = response;
                }
                else
                {
                    result.Result.AddRange(response.Result);
                }

                page++;
            }while (response.Result.Count >= pageSize);

            return(result);
        }
Esempio n. 2
0
        public static string GetScopes(ESI.CharacterEnum e)
        {
            var scopes = new string[0];

            switch (e)
            {
            case ESI.CharacterEnum.BuildCorp:
                scopes = new string[]
                {
                    "esi-assets.read_corporation_assets.v1",     // Corp assets
                    "esi-industry.read_corporation_jobs.v1",     // Corp industry jobs
                };
                break;

            case ESI.CharacterEnum.EmpireDonkey:
                scopes = new string[]
                {
                    "esi-assets.read_assets.v1",             // Char assets
                    "esi-markets.read_corporation_orders.v1" // Corp market orders
                };
                break;
            }

            return(string.Join(" ", scopes));
        }
Esempio n. 3
0
        static string SetPathParameters(string route, ESI.CharacterEnum e, Dictionary <string, object> parms)
        {
            int character_id = 0, corporation_id = 0;

            switch (e)
            {
            case ESI.CharacterEnum.BuildCorp:
                character_id   = db.Settings.BuildCorpCharacterId;
                corporation_id = db.Settings.BuildCorpCorporationId;
                break;

            case ESI.CharacterEnum.EmpireDonkey:
                character_id   = db.Settings.EmpireDonkeyCharacterId;
                corporation_id = db.Settings.EmpireDonkeyCorporationId;
                break;
            }

            route = route.Replace("{character_id}", character_id.ToString());
            route = route.Replace("{corporation_id}", corporation_id.ToString());

            if (parms != null)
            {
                var parmkeys = parms.Keys.ToList();

                foreach (var key in parmkeys)
                {
                    var parm = "{" + key + "}";
                    if (route.Contains(parm))
                    {
                        route = route.Replace(parm, parms[key].ToString());
                        parms.Remove(key);
                    }
                }
            }

            return(route);
        }
Esempio n. 4
0
        public static ESIResponse <T> GetESIResponse <T>(string route, ESI.CharacterEnum typeenum = ESI.CharacterEnum.None, Dictionary <string, object> parms = null, string version = null)
        {
            if (version == null)
            {
                version = "latest";
            }

            route = SetPathParameters(route, typeenum, parms);

            string token = null;

            switch (typeenum)
            {
            case ESI.CharacterEnum.BuildCorp:
                token = db.Settings.BuildCorpAccessToken;
                break;

            case ESI.CharacterEnum.EmpireDonkey:
                token = db.Settings.EmpireDonkeyAccessToken;
                break;
            }

            var url = db.Settings.ESIURL
                      .AppendPathSegments(version, route);

            if (parms != null && parms.Count > 0)
            {
                url.SetQueryParams(parms);
            }

            int retry = 0;

            while (retry < 3)
            {
                try
                {
                    HttpResponseMessage result;
                    // If we got a token, use it
                    if (!string.IsNullOrEmpty(token))
                    {
                        result = url.WithOAuthBearerToken(token).GetAsync().Result;
                    }
                    else // Otherwise just query directly
                    {
                        result = url.GetAsync().Result;
                    }

                    var json = result.Content.ReadAsStringAsync().Result;

                    var response = new ESIResponse <T>()
                    {
                        CachedUntil = result.Content.Headers?.Expires?.UtcDateTime.AddSeconds(10),
                        Result      = Newtonsoft.Json.JsonConvert.DeserializeObject <T>(json)
                    };

                    return(response);
                }
                catch (Exception ex)
                {
                    if (ex is AggregateException e)
                    {
                        ex = e.InnerException;
                    }

                    retry++;
                    Console.WriteLine("Caught an error accesing (#" + retry + ")" + url);
                    Console.WriteLine("Exception: " + ex.GetType().Name + " - " + ex.Message);
                }
            }
            Console.WriteLine("Failed to call ESI");
            Console.ReadKey();
            throw new Exception("Dead");
        }