internal void ParseData(FonbetResponse data) { if (_bd == null) { _bd = new UnicDataDecorator(UnicData.Load("bd.data")); UnicDataDecorator.UpdateBase += UnicDataDecorator_UpdateBase; } lock (_lockObj) { if (IsFirstLoad) { LoadLink(data); } else { if (FromVersion != data.FromVersion) { IsFirstLoad = true; throw new ArgumentException($"Пришел не тот пакет обновления {FromVersion} != {data.FromVersion}"); } UpdateLink(data); } _line.LastUpdate = DateTime.Now; } FromVersion = data.PacketVersion; }
private void Update() { Stopwatch sw = new Stopwatch(); while (true) { try { sw.Restart(); string url; if (IsFirstLoad) { url = _apiUrl + "live/currentLine/ru/"; } else { url = _apiUrl + $"live/updatesFromVersion/{FromVersion}/ru/"; } var response = _req.Get(url).ToString(); FonbetResponse fonbetResponse = JsonConvert.DeserializeObject <FonbetResponse>(response); ParseData(fonbetResponse); sw.Stop(); if (sw.ElapsedMilliseconds < 1000) { Thread.Sleep(1000 - (int)sw.ElapsedMilliseconds); } Logger.AddLog($"Линия была загружена за {sw.ElapsedMilliseconds}", Logger.LogTarget.FonbetClient); } catch (Exception e) { Logger.AddLog($"Ошибка загрузки линии: {e.Message}", Logger.LogTarget.FonbetClient, Logger.LogLevel.Critical); IsFirstLoad = false; Thread.Sleep(1000); } } }
private void UpdateLink(FonbetResponse data) { #if DEBUG //Делаем замер, за сколько наша линия перестраиваеться Stopwatch sw = new Stopwatch(); sw.Start(); #endif bool changed = false; //Дописываем новый вид спорта foreach (var sport in data.Sports) { _line.Sports[sport.Id] = sport; } //добавляем новые события foreach (var dataEvent in data.Events) { if (dataEvent.Place == "live") { if (!_line.Events.ContainsKey(dataEvent.Id)) { dataEvent.Factors = new Dictionary <int, CustomFactor>(); if (dataEvent.Level == 1) { dataEvent.Team1Id = _bd.GetNumber(dataEvent.Team1); dataEvent.Team2Id = _bd.GetNumber(dataEvent.Team2); } _line.Events.Add(dataEvent.Id, dataEvent); changed = true; } } else if (dataEvent.Place == "notActive") { _line.Events.Remove(dataEvent.Id); changed = true; } else { } } //Обновляем доп информацию о событиях foreach (EventMisc eventMisc in data.EventMiscs) { if (!_line.Events.ContainsKey(eventMisc.Id)) { Console.WriteLine($"Нет такого id {eventMisc.Id} для eventMisc"); continue; } _line.Events[eventMisc.Id].EventMisc = eventMisc; changed = true; } //Добавляем/обновляем новые ставкви foreach (CustomFactor factor in data.CustomFactors) { if (!_line.Events.ContainsKey(factor.E)) { Console.WriteLine($"Нет такого id {factor.E} для Factora"); continue; } var ev = _line.Events[factor.E]; if (factor.V == 0 && ev.Factors.ContainsKey(factor.F)) { ev.Factors.Remove(factor.F); changed = true; } else { if (factor.V != 0) { ev.Factors[factor.F] = factor; changed = true; } } } //Блокируем/разблокируем события foreach (var block in data.EventBlocks) { if (!_line.Events.ContainsKey(block.EventId)) { Console.WriteLine($"Странно. нет такого события: {block.EventId}"); continue; } if (block.State == "unblocked") { _line.Events[block.EventId].IsBlock = false; foreach (var customFactor in _line.Events[block.EventId].Factors) { customFactor.Value.IsBlocked = false; } changed = true; } else if (block.State == "blocked") { _line.Events[block.EventId].IsBlock = true; #if DEBUG Console.WriteLine($"Событие №{block.EventId} было заблокированно. {_line.Events[block.EventId].Team1}-{_line.Events[block.EventId].Team2}"); #endif var bl = _line.Events[block.EventId].Factors; foreach (var factor in bl) { factor.Value.IsBlocked = true; } changed = true; } else if (block.State == "partial") { foreach (var blockFactor in block.Factors) { if (_line.Events[block.EventId].Factors.ContainsKey(blockFactor)) { #if DEBUG Console.WriteLine($"Ставка №{blockFactor} было заблокированна. {_line.Events[block.EventId].Team1}-{_line.Events[block.EventId].Team2}"); #endif _line.Events[block.EventId].Factors[blockFactor].IsBlocked = true; } else { Console.WriteLine($" в {block.EventId} нет такого фактора {blockFactor}. Не могу заблокировать"); } } changed = true; } else { } } IsChanged = changed; #if DEBUG sw.Stop(); Console.WriteLine($"Линия была обновленна за {sw.Elapsed}"); System.Threading.Thread.Sleep(1000); #endif }
private void LoadLink(FonbetResponse data) { #if DEBUG //Делаем замер, за сколько наша линия перестраиваеться Stopwatch sw = new Stopwatch(); sw.Start(); #endif _line = new CurrentLine(); foreach (Event dataEvent in data.Events) { dataEvent.Factors = new Dictionary <int, CustomFactor>(); if (dataEvent.Level == 1) { dataEvent.Team1Id = _bd.GetNumber(dataEvent.Team1); dataEvent.Team2Id = _bd.GetNumber(dataEvent.Team2); } _line.Events.Add(dataEvent.Id, dataEvent); } foreach (EventMisc eventMisc in data.EventMiscs) { var ev = _line.Events[eventMisc.Id]; if (ev != null) { ev.EventMisc = eventMisc; } } foreach (CustomFactor factor in data.CustomFactors) { var ev = _line.Events[factor.E]; if (ev != null) { if (ev.Factors == null) { ev.Factors = new Dictionary <int, CustomFactor>(); } ev.Factors[factor.F] = factor; } } _line.Sports = new Dictionary <int, Sport>(); foreach (var sport in data.Sports) { _line.Sports.Add(sport.Id, sport); } //Блокируем/разблокируем события foreach (var block in data.EventBlocks) { if (!_line.Events.ContainsKey(block.EventId)) { Console.WriteLine($"Странно. нет такого события: {block.EventId}"); continue; } if (block.State == "unblocked") { _line.Events[block.EventId].IsBlock = false; foreach (var customFactor in _line.Events[block.EventId].Factors) { customFactor.Value.IsBlocked = false; } } else if (block.State == "blocked") { _line.Events[block.EventId].IsBlock = true; } else if (block.State == "partial") { foreach (var blockFactor in block.Factors) { if (_line.Events[block.EventId].Factors.ContainsKey(blockFactor)) { _line.Events[block.EventId].Factors[blockFactor].IsBlocked = true; } else { Console.WriteLine($" в {block.EventId} нет такого фактора {blockFactor}"); } } } else { } } IsFirstLoad = false; #if DEBUG sw.Stop(); Console.WriteLine($"Линия была впервые загруженна за {sw.Elapsed}"); #endif }