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; } }
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; } }
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); } }
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(); }
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); }
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); }