Example #1
0
        private void LoopCache()
        {
            if (_shouldExit)
            {
                Stop();
                return;
            }

            /*
             * lock (_queueLock)
             * {
             *  for (var i = 0; i < _pokemonQueue.Count; i++)
             *  {
             *      var pokemon = _pokemonQueue[i];
             *      if (pokemon.ExpireTimestamp <= DateTime.UtcNow.ToTotalSeconds())
             *      {
             *          // Pokemon expired, remove from queue
             *          _logger.LogDebug($"[{Name}] Pokemon {pokemon.Id} expired, removing from IV queue...");
             *          _pokemonQueue.Remove(pokemon);
             *      }
             *  }
             * }
             */
            lock (_scannedLock)
            {
                if (_scannedPokemon.Count == 0)
                {
                    if (_shouldExit)
                    {
                        return;
                    }

                    return;
                }

                var first     = _scannedPokemon.PopFirst(out _scannedPokemon);
                var timeSince = DateTime.UtcNow - first.Date;
                if (timeSince.TotalSeconds < 120)
                {
                    Thread.Sleep(Convert.ToInt32(120 - timeSince.TotalSeconds) * 1000);
                    if (_shouldExit)
                    {
                        return;
                    }
                }
                Pokemon pokemonReal = null;
                try
                {
                    pokemonReal = _pokemonRepository.GetByIdAsync(first.Pokemon.Id)
                                  .ConfigureAwait(false)
                                  .GetAwaiter()
                                  .GetResult();
                }
                catch (Exception ex)
                {
                    _logger.LogError($"[{Name}] Error: {ex}");
                    if (_shouldExit)
                    {
                        return;
                    }
                }
                if (pokemonReal != null)
                {
                    if (pokemonReal.AttackIV == null)
                    {
                        _logger.LogDebug($"[{Name}] Checked Pokemon {pokemonReal.Id} does not have IV");
                        AddPokemon(pokemonReal);
                    }
                    else
                    {
                        _logger.LogDebug($"[{Name}] Checked Pokemon {pokemonReal.Id} has IV");
                        //GotIV(pokemonReal);
                    }
                }
            }
        }