예제 #1
0
        private void UpdateData()
        {
            try
            {
                Dictionary <long, Position> oldPositions = PositionsHelper.GetLastLoadPositions()
                                                           .ToDictionary(el => el.Auc);

                IAucJsonFile    file         = GetAucJsonFile();
                List <Position> newPositions = file.AucPositions.ToList();

                List <Position> oldHardPositions  = new List <Position>();
                List <Position> newHardPositions  = new List <Position>();
                List <Position> toUpdatePositions = new List <Position>();

                foreach (Position newPos in newPositions)
                {
                    Position oldPos = null;
                    // Если не получилось найти, значит лот новый (раньше такого лота не было, позможно перевыставили).
                    if (!oldPositions.TryGetValue(newPos.Auc, out oldPos))
                    {
                        newHardPositions.Add(newPos);
                    }
                }

                // Обновляем старые лоты.
                AucTraderDbContextHelper.SavePositionsAsPackages(newHardPositions);
            }
            catch (Exception)
            {
            }
        }
예제 #2
0
        public void ParseAucJsonFileTest()
        {
            // Arange
            IAucJsonFile   jsonFile = null;
            ResponseParser parser   = new ResponseParser();

            // Act
            jsonFile = parser.ParseAucJsonFile(aucJsonFile);

            // Assert
            Assert.IsNotNull(jsonFile);
            Assert.AreEqual("Deathguard", jsonFile.AucRealms[0].Name, "Неверное название реалма");
            Assert.AreEqual("deathguard", jsonFile.AucRealms[0].Slug, "Неверный slug");
            Assert.AreNotEqual(jsonFile.AucPositions.Count(), String.Format("ParseAucResponseTest. Прочитали Files {0}, а должно быть {1}", jsonFile.AucPositions.Count(), 1));

            Assert.AreEqual(1525884116, jsonFile.AucPositions[0].Auc, "Неверный Auc");
            Assert.AreEqual(110640, jsonFile.AucPositions[0].Item);
            Assert.AreEqual("Тест", jsonFile.AucPositions[0].Owner);
            Assert.AreEqual("Тест", jsonFile.AucPositions[0].OwnerRealm);
            Assert.AreEqual(1000000, jsonFile.AucPositions[0].Bid);
            Assert.AreEqual(1000000, jsonFile.AucPositions[0].BuyOut);
            Assert.AreEqual(1, jsonFile.AucPositions[0].Quantity);
            //Assert.AreEqual("LONG", jsonFile.AucPositions[0].TimeLeft);
            Assert.AreEqual(0, jsonFile.AucPositions[0].Rand);
            Assert.AreEqual(0, jsonFile.AucPositions[0].Seed);
            Assert.AreEqual(0, jsonFile.AucPositions[0].Context);
        }
예제 #3
0
        private void UpdateData2()
        {
            try
            {
                Dictionary <long, Position> oldPositions = PositionsHelper.GetLastLoadPositions2()
                                                           .ToDictionary(el => el.Auc);

                IAucJsonFile    file         = GetAucJsonFile();
                List <Position> newPositions = file.AucPositions.ToList();

                Dictionary <long, Position> toUpdatePositions = new Dictionary <long, Position>();
                List <Position>             newHardPositions  = new List <Position>();
                List <Position>             oldHardPositions  = new List <Position>();

                DateTime withdrwanDateTime = newPositions.First().LoadDateTime;
                foreach (Position newPos in newPositions)
                {
                    Position oldPos = null;
                    // Если не получилось найти, значит лот новый (раньше такого лота не было, позможно перевыставили).
                    if (!oldPositions.TryGetValue(newPos.Auc, out oldPos))
                    {
                        // Не нашли старой позиции, значит новая, может быть перевыставили и пох, пока что.
                        newHardPositions.Add(newPos);
                        continue;
                    }

                    // Нашли старую идентичную позицию, обновим ее новыми даннымы.
                    if (oldPos != null)
                    {
                        newPos.Id = oldPos.Id;
                        toUpdatePositions.Add(newPos.Auc, newPos);
                    }
                }

                foreach (var oldPos in oldPositions.Values)
                {
                    Position pos;
                    if (!toUpdatePositions.TryGetValue(oldPos.Auc, out pos))
                    {
                        // Не смогли найти, значит лот выбыл.
                        oldPos.WithdrawnDateTime = withdrwanDateTime;
                        oldHardPositions.Add(oldPos);
                    }
                }

                // Закрываем старые лоты.
                AucTraderDbContextHelper.SavePositionsAsPackages(oldHardPositions);

                // Обновляем старые данные.
                AucTraderDbContextHelper.SavePositionsAsPackages(toUpdatePositions.Values.ToList());

                // Обновляем старые лоты.
                AucTraderDbContextHelper.SavePositionsAsPackages(newHardPositions);
            }
            catch (Exception e)
            {
                AppLogHelper.TraceError("", e);
            }
        }
예제 #4
0
        private IAucJsonFile GetAucJsonFile()
        {
            AucDataLoader loader = new AucDataLoader();

            DateTime     lastModifyDate;
            IAucJsonFile file = loader.GetAucJsonFile(out lastModifyDate);

            foreach (var position in file.AucPositions)
            {
                position.LoadDateTime = lastModifyDate;
            }
            return(file);
        }
예제 #5
0
        public IAucJsonFile ParseAucJsonFile(string responseStr)
        {
            IAucJsonFile response = null;

            if (String.IsNullOrEmpty(responseStr))
            {
                return(null);
            }

            try
            {
                DataContractJsonSerializer json = new DataContractJsonSerializer(typeof(AucJsonFile));
                response = (AucJsonFile)json.ReadObject(new System.IO.MemoryStream(Encoding.UTF8.GetBytes(responseStr)));
            }
            catch (Exception e)
            {
                throw new ApplicationException("Не удалось прочитать ответ с сервера API.", e);
            }

            return(response);
        }
예제 #6
0
        public IAucJsonFile GetAucJsonFile(out DateTime lastModifyDate)
        {
            try
            {
                IAucJsonFile response    = null;
                IAucResponse aucResponse = GetAucResponse();

                DateTime baseDateTime = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
                lastModifyDate = baseDateTime.AddMilliseconds(aucResponse.Files.First().LastModified).ToLocalTime();

                IWebApiClient webApiClient = new WebApiClient(Resources.Locale, Resources.ApiKey);
                string        file         = webApiClient.GetAucFile(aucResponse.Files[0].Url);

                IResponseParser parser = new ResponseParser();
                response = parser.ParseAucJsonFile(file);

                return(response);
            }
            catch (Exception e)
            {
                throw;
            }
        }