private async Task EnsurePricesAvailable(IEventStoreConnection eventStoreConnection)
        {
            var a = new PriceAdded("A", 50);
            var b = new PriceAdded("B", 30);

            var events = new[] { a, b }
            .Select(JsonConvert.SerializeObject)
            .Select(j => new EventData(Guid.NewGuid(), nameof(PriceAdded), true, Encoding.UTF8.GetBytes(j), null));

            await eventStoreConnection.AppendToStreamAsync("prices", ExpectedVersion.Any, events);
        }
示例#2
0
        private void downloadPrices()
        {
            var sets = _repo.SetsByCode.Values.OrderByDescending(_ => _.ReleaseDate).ToArray();

            using (var stream = _priceRepository.AppendPriceInProgressStream())
                using (var writer = new StreamWriter(stream))
                    foreach (var set in sets)
                    {
                        var sids = set.Cards
                                   .Where(_priceRepository.IsDefined)
                                   .Select(_priceRepository.GetPriceId)
                                   .Where(F.IsNotNull)
                                   .Select(_ => _.Sid)
                                   .Where(F.IsNotNull)
                                   .Where(sid => !_priceRepository.ContainsPrice(sid))
                                   .Distinct()
                                   .ToArray();

                        Parallel.ForEach(sids, new ParallelOptions {
                            MaxDegreeOfParallelism = Parallelism
                        }, sid =>
                        {
                            if (sid.EndsWith("&utm_source=scryfall"))
                            {
                                PriceAdded?.Invoke();
                                return;
                            }

                            PriceValues price;
                            try
                            {
                                price = _client.DownloadPrice(sid);
                            }
                            catch (WebException)
                            {
                                return;
                            }

                            lock (_sync)
                            {
                                var serialized = JsonConvert.SerializeObject(price, Formatting.None);
                                _priceRepository.AddPrice(sid, price);
                                writer.WriteLine(serialized);
                                PriceAdded?.Invoke();
                            }
                        });
                    }
        }
示例#3
0
        private void downloadPrices()
        {
            var sets = _repo.SetsByCode.Values.OrderByDescending(_ => _.ReleaseDate).ToArray();

            using (var stream = _priceRepository.AppendPriceInProgressStream())
                using (var writer = new StreamWriter(stream))
                    foreach (var set in sets)
                    {
                        foreach (var card in set.Cards)
                        {
                            if (_aborted)
                            {
                                return;
                            }

                            if (!_priceRepository.IsDefined(card))
                            {
                                continue;
                            }

                            var sid = _priceRepository.GetPriceId(card);

                            if (sid == null)
                            {
                                continue;
                            }

                            if (_priceRepository.ContainsPrice(sid))
                            {
                                continue;
                            }

                            var price = _client.DownloadPrice(sid);

                            _priceRepository.AddPrice(sid, price);

                            PriceAdded?.Invoke();

                            var serialized = JsonConvert.SerializeObject(_priceRepository.GetPrice(sid), Formatting.None);
                            writer.WriteLine(serialized);
                        }
                    }
        }
 public void AddPrice(float price)
 {
     this.prices.Add(price);
     PriceAdded?.Invoke(this, price);
 }