Пример #1
0
        static void Main(string[] args)
        {
            Console.CancelKeyPress += (sender, e) =>
            {
                _quitEvent.Set();
                e.Cancel = true;
            };

            ConsoleExt.WriteInfo($"[DataConsumer] Starting...");
            var configPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "config.json");//Strings.DefaultConfigFileName);

            try
            {
                var config = Config.Load(configPath);
                if (config == null)
                {
                    Console.WriteLine($"Failed to load config {configPath}");
                    return;
                }

                var consumer = new DataConsumer(config);
                consumer.Start();

                _quitEvent.WaitOne();
                ConsoleExt.WriteInfo($"[DataConsumer] Received Ctrl+C event. Exiting...");
            }
            catch (Exception ex)
            {
                ConsoleExt.WriteError($"Config: {ex}");
                Console.ReadKey();
                return;
            }
        }
Пример #2
0
        static void Main(string[] args)
        {
            Console.CancelKeyPress += (sender, e) =>
            {
                _quitEvent.Set();
                e.Cancel = true;
            };

            ConsoleExt.WriteInfo($"[WebhookProcessor] Starting...");
            var configPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "config.json");//Strings.DefaultConfigFileName);

            try
            {
                _config = Config.Load(configPath);
                if (_config == null)
                {
                    Console.WriteLine($"Failed to load config {configPath}");
                    return;
                }

                var options = new ConfigurationOptions
                {
                    EndPoints =
                    {
                        { $"{_config.Redis.Host}:{_config.Redis.Port}" }
                    },
                    Password = _config.Redis.Password,
                };
                _redis = ConnectionMultiplexer.Connect(options);
                _redis.ConnectionFailed += RedisOnConnectionFailed;
                _redis.ErrorMessage     += RedisOnErrorMessage;
                _redis.InternalError    += RedisOnInternalError;
                if (_redis.IsConnected)
                {
                    _subscriber = _redis.GetSubscriber();
                    _subscriber.Subscribe(/*_config.Redis.QueueName*/ "*", SubscriptionHandler);
                    //_redisDatabase = _redis.GetDatabase(_config.Redis.DatabaseNum);
                }

                ConsoleExt.WriteInfo($"[WebhookProcessor] Starting...");
                WebhookController.Instance.SleepIntervalS = 5;
                WebhookController.Instance.Start();
                ConsoleExt.WriteInfo($"[WebhookProcessor] Started, waiting for webhook events");

                _quitEvent.WaitOne();
                ConsoleExt.WriteInfo($"[WebhookProcessor] Received Ctrl+C event. Exiting...");
            }
            catch (Exception ex)
            {
                ConsoleExt.WriteError($"[WebhookProcessor] Error: {ex}");
                Console.ReadKey();
                return;
            }
        }
Пример #3
0
        private static bool SendEvents(string url, List <dynamic> events, ushort retryCount = 0)
        {
            if (events == null || events.Count == 0)
            {
                return(false);
            }

            NetUtils.SendWebhook(url, events.ToJson(), retryCount);
            ConsoleExt.WriteInfo($"[WebhookController] Sent {events.Count} webhook events to {url}");
            return(true);
        }
 public bool ExecuteSql(string sql)
 {
     try
     {
         var result = _dbContext?.Database.ExecuteSqlRaw(sql);
         if (string.IsNullOrEmpty(result.ToString()) || result != 0)
         {
             return(false);
         }
         ConsoleExt.WriteInfo($"[RawSql] Result -> OK");
         return(true);
     }
     catch (Exception) // ex)
     {
         //this log not needed because log says warn.
         //ConsoleExt.WriteError($"[RawSql] Result: {ex}, SQL: {sql}");
         return(false);
     }
 }
Пример #5
0
        public static void Main(string[] args)
        {
            ConsoleExt.WriteInfo($"ProtoParser starting...");
            var configPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "config.json");//Strings.DefaultConfigFileName);

            try
            {
                Startup.Config = Config.Load(configPath);
                if (Startup.Config == null)
                {
                    Console.WriteLine($"Failed to load config {configPath}");
                    return;
                }
            }
            catch (Exception ex)
            {
                ConsoleExt.WriteError($"Config: {ex.Message}");
                Console.ReadKey();
                return;
            }

            CreateHostBuilder(args).Build().Run();
        }
Пример #6
0
        public async Task AddEncounter(EncounterOutProto encounter, string username)
        {
            var pokemonId = (uint)encounter.Pokemon.Pokemon.PokemonId;
            var cp        = (ushort?)encounter.Pokemon.Pokemon.Cp;
            var move1     = (uint?)encounter.Pokemon.Pokemon.Move1;
            var move2     = (uint?)encounter.Pokemon.Pokemon.Move2;
            var size      = (double?)encounter.Pokemon.Pokemon.HeightM;
            var weight    = (double?)encounter.Pokemon.Pokemon.WeightKg;
            var atkIV     = (ushort?)encounter.Pokemon.Pokemon.IndividualAttack;
            var defIV     = (ushort?)encounter.Pokemon.Pokemon.IndividualDefense;
            var staIV     = (ushort?)encounter.Pokemon.Pokemon.IndividualStamina;
            var costume   = (ushort)encounter.Pokemon.Pokemon.PokemonDisplay.Costume;
            var form      = (ushort?)encounter.Pokemon.Pokemon.PokemonDisplay.Form;
            var gender    = (ushort)encounter.Pokemon.Pokemon.PokemonDisplay.Gender;

            if (PokemonId != pokemonId ||
                CP != cp ||
                Move1 != move1 ||
                Move2 != move2 ||
                Size != size ||
                Weight != weight ||
                AttackIV != atkIV ||
                DefenseIV != defIV ||
                StaminaIV != staIV ||
                Costume != costume ||
                Form != form ||
                Gender != gender)
            {
                HasChanges    = true;
                _hasIvChanges = true;
            }

            PokemonId = pokemonId;
            CP        = cp;
            Move1     = move1;
            Move2     = move2;
            Size      = size;
            Weight    = weight;
            AttackIV  = atkIV;
            DefenseIV = defIV;
            StaminaIV = staIV;
            Costume   = costume;
            Form      = form;
            Gender    = gender;
            IsShiny   = encounter.Pokemon.Pokemon.PokemonDisplay.Shiny;
            Username  = username;

            if (_hasIvChanges)
            {
                var    cpMultiplier = encounter.Pokemon.Pokemon.CpMultiplier;
                ushort level;
                if (cpMultiplier < 0.734)
                {
                    level = (ushort)Math.Round(
                        (58.35178527 * cpMultiplier * cpMultiplier) -
                        (2.838007664 * cpMultiplier) + 0.8539209906
                        );
                }
                else
                {
                    level = (ushort)Math.Round((171.0112688 * cpMultiplier) - 95.20425243);
                }
                Level   = level;
                IsDitto = IsDittoDisguised(pokemonId, level, Weather, AttackIV ?? 0, DefenseIV ?? 0, StaminaIV ?? 0);
                if (IsDitto)
                {
                    ConsoleExt.WriteInfo($"[Pokemon] Pokemon {Id} Ditto found, disguised as {PokemonId}");
                    SetDittoAttributes(PokemonId);
                }

                if (AttackIV != null)
                {
                    await SetPvpRankings().ConfigureAwait(false);
                }

                SpawnId = Convert.ToUInt64(encounter.Pokemon.SpawnPointId, 16);
                var timestampMs = DateTime.UtcNow.ToTotalSeconds();
                await HandleSpawnpoint(encounter.Pokemon.TimeTillHiddenMs, timestampMs).ConfigureAwait(false);

                Updated = DateTime.UtcNow.ToTotalSeconds();
                Changed = Updated;
                if (FirstSeenTimestamp == 0)
                {
                    FirstSeenTimestamp = Updated;
                }
            }
            await Task.CompletedTask.ConfigureAwait(false);
        }
Пример #7
0
        public PokemonResult Update(Pokemon oldPokemon = null, bool updateIV = false)
        {
            var now             = DateTime.UtcNow.ToTotalSeconds();
            var setIVForWeather = false;
            var result          = new PokemonResult();

            if (oldPokemon == null)
            {
                Updated = now;
                //FirstSeenTimestamp = now;
                Changed = now;
            }
            else
            {
                /*
                 * if (oldPokemon.FirstSeenTimestamp == 0 && FirstSeenTimestamp == 0)
                 * {
                 *  FirstSeenTimestamp = now;
                 * }
                 * else
                 * {
                 *  FirstSeenTimestamp = oldPokemon.FirstSeenTimestamp;
                 * }
                 */
                if (ExpireTimestamp == 0)
                {
                    if (oldPokemon.ExpireTimestamp - now < DefaultTimeReseen)
                    {
                        ExpireTimestamp = now + DefaultTimeReseen;
                    }
                    else
                    {
                        ExpireTimestamp = oldPokemon.ExpireTimestamp;
                    }
                }
                if (!IsExpireTimestampVerified && oldPokemon.IsExpireTimestampVerified)
                {
                    IsExpireTimestampVerified = oldPokemon.IsExpireTimestampVerified;
                    ExpireTimestamp           = oldPokemon.ExpireTimestamp;
                }
                if (oldPokemon.PokemonId != PokemonId)
                {
                    if (oldPokemon.PokemonId != DittoPokemonId)
                    {
                        ConsoleExt.WriteInfo($"[Pokemon] Pokemon {Id} changed from {oldPokemon.PokemonId} to {PokemonId}");
                    }
                    else if ((oldPokemon.DisplayPokemonId ?? 0) != PokemonId)
                    {
                        ConsoleExt.WriteInfo($"[Pokemon] Pokemon {Id} Ditto disguised as {oldPokemon.DisplayPokemonId} now see as {PokemonId}");
                    }
                }
                if (oldPokemon.CellId > 0 && CellId == 0)
                {
                    CellId = oldPokemon.CellId;
                }
                if (oldPokemon.SpawnId != null)
                {
                    SpawnId   = oldPokemon.SpawnId;
                    Latitude  = oldPokemon.Latitude;
                    Longitude = oldPokemon.Longitude;
                }
                if (!string.IsNullOrEmpty(oldPokemon.PokestopId) && string.IsNullOrEmpty(PokestopId))
                {
                    PokestopId = oldPokemon.PokestopId;
                }
                if (oldPokemon.PvpRankingsGreatLeague != null && PvpRankingsGreatLeague == null)
                {
                    PvpRankingsGreatLeague = oldPokemon.PvpRankingsGreatLeague;
                }
                if (oldPokemon.PvpRankingsUltraLeague != null && PvpRankingsUltraLeague == null)
                {
                    PvpRankingsUltraLeague = oldPokemon.PvpRankingsUltraLeague;
                }
                if (updateIV && oldPokemon.AttackIV == null && AttackIV != null)
                {
                    Changed = now;
                }
                else
                {
                    Changed = oldPokemon.Changed;
                }
                var weatherChanged = (oldPokemon.Weather == 0 && Weather > 0) || (Weather == 0 && oldPokemon.Weather > 0);
                if (oldPokemon.AttackIV != null && AttackIV == null && !weatherChanged)
                {
                    setIVForWeather = false;
                    AttackIV        = oldPokemon.AttackIV;
                    DefenseIV       = oldPokemon.DefenseIV;
                    StaminaIV       = oldPokemon.StaminaIV;
                    CP      = oldPokemon.CP;
                    Weight  = oldPokemon.Weight;
                    Size    = oldPokemon.Size;
                    Move1   = oldPokemon.Move1;
                    Move2   = oldPokemon.Move2;
                    Level   = oldPokemon.Level;
                    IsShiny = oldPokemon.IsShiny;
                    IsDitto = IsDittoDisguised(oldPokemon);
                    if (IsDitto)
                    {
                        ConsoleExt.WriteInfo($"[Pokemon] OldPokemon {Id} Ditto found, disguised as {PokemonId}");
                        SetDittoAttributes(PokemonId);
                    }
                }
                else if ((AttackIV != null && oldPokemon.AttackIV == null) || (CP != null && oldPokemon.CP == null) || _hasIvChanges)
                {
                    setIVForWeather = false;
                    updateIV        = true;
                }
                else if (weatherChanged && oldPokemon.AttackIV != null && !NoWeatherIVClearing)
                {
                    ConsoleExt.WriteInfo($"[Pokemon] Pokemon {Id} changed WeatherBoosted state. Clearing IVs");
                    setIVForWeather = true;
                    AttackIV        = null;
                    DefenseIV       = null;
                    StaminaIV       = null;
                    CP     = null;
                    Weight = null;
                    Size   = null;
                    Move1  = null;
                    Move2  = null;
                    Level  = null;
                    PvpRankingsGreatLeague = null;
                    PvpRankingsUltraLeague = null;
                    ConsoleExt.WriteInfo("[Pokemon] WeatherBoosted state changed. Cleared IVs");
                }
                else
                {
                    setIVForWeather = false;
                }

                // Check if we should update the pokemon or not
                if (!ShouldUpdate(oldPokemon, this))
                {
                    return(result);
                }

                if (oldPokemon.PokemonId == DittoPokemonId && PokemonId != DittoPokemonId)
                {
                    ConsoleExt.WriteInfo($"[Pokemon] Pokemon {Id} Ditto changed from {oldPokemon.PokemonId} to {PokemonId}");
                }

                Updated = now;
            }

            if (setIVForWeather)
            {
                result.IsNewOrHasChanges = true;
                result.Webhook           = true;
            }
            else if (oldPokemon == null)
            {
                result.IsNewOrHasChanges = true;
                result.Webhook           = true;
                if (AttackIV != null)
                {
                    result.GotIV = true;
                }
            }
            else if ((updateIV && oldPokemon.AttackIV == null && AttackIV != null) || oldPokemon._hasIvChanges)
            {
                oldPokemon._hasIvChanges = false;
                result.Webhook           = true;
                result.GotIV             = true;
            }
            return(result);
        }