Ejemplo n.º 1
0
        internal static void Import(List <MarketerDataRequest> marketData)
        {
            foreach (var data in marketData)
            {
                var cachedType = CachedRequests.FirstOrDefault(x => x.RawMarketType.id == data.Id.ToString() && x.Region == data.Region && x.SolarSystem == data.SolarSystem);
                if (cachedType != null)
                {
                    if (DateTime.Compare(cachedType.Timestamp, data.Timestamp) < 0)
                    {
                        CachedRequests.Remove(cachedType);
                    }
                    else
                    {
                        continue;
                    }
                }

                CachedRequests.Add(data);
            }
        }
Ejemplo n.º 2
0
        internal static void Request(string region, string solarSystem)
        {
            using (var client = new HttpClient())
            {
                var values = new Dictionary <string, string>();

                var typeIds  = string.Empty;
                var requests = PendingRequests.Where(x => x.Region == region && x.SolarSystem == solarSystem);
                foreach (var value in requests)
                {
                    if (typeIds != string.Empty)
                    {
                        typeIds += ",";
                    }

                    typeIds += value.Id.ToString();
                }
                values.Add("typeid", typeIds);

                if (region != null && !string.IsNullOrWhiteSpace(region))
                {
                    values.Add("regionlimit", region);
                }

                if (solarSystem != null && !string.IsNullOrWhiteSpace(solarSystem))
                {
                    values.Add("usesystem", solarSystem);
                }

                var content = new FormUrlEncodedContent(values);

                var result = client.PostAsync(_marketerApi, content).Result;

                if (result.IsSuccessStatusCode)
                {
                    var remainingRequests = result.Headers.FirstOrDefault(x => x.Key == "X-Ratelimit-Remaining");
                    RequestCapacity = int.Parse(remainingRequests.Value.First());

                    var remainingTime = result.Headers.FirstOrDefault(x => x.Key == "X-Ratelimit-Reset");
                    var resetDateTime = new DateTime(1970, 1, 1).AddSeconds(Int32.Parse(remainingTime.Value.First()));
                    RequestResetTimer = resetDateTime.Subtract((DateTime.UtcNow));


                    string resultContent = result.Content.ReadAsStringAsync().Result;

                    TextReader input = new StringReader(resultContent);

                    XmlSerializer serializer = new XmlSerializer(typeof(RawExec_api), new XmlRootAttribute("exec_api"));

                    var marketResponse = (RawExec_api)serializer.Deserialize(input);

                    foreach (var type in marketResponse.marketstat.type)
                    {
                        var pendingRequests = PendingRequests.Where(x => x.Region == region && x.SolarSystem == solarSystem && x.Id.ToString() == type.id).ToList();

                        foreach (var pendingRequest in pendingRequests)
                        {
                            if (pendingRequest != null)
                            {
                                pendingRequest.RawMarketType = type;
                                PendingRequests.Remove(pendingRequest);
                                var cached = CachedRequests.FirstOrDefault(x => x.RawMarketType.id == pendingRequest.RawMarketType.id && x.Region == pendingRequest.Region && x.SolarSystem == pendingRequest.SolarSystem);
                                if (cached == null)
                                {
                                    CachedRequests.Add(pendingRequest);
                                }
                            }
                        }
                    }
                }
                else
                {
                    var pendingRequests = PendingRequests.Where(x => x.Region == region && x.SolarSystem == solarSystem).ToList();

                    foreach (var pendingRequest in pendingRequests)
                    {
                        if (pendingRequest != null)
                        {
                            PendingRequests.Remove(pendingRequest);
                        }
                    }
                }
            }
        }