private static List <SniperInfo> GetSniperInfoFrom_pokezz(ISession session, List <PokemonId> pokemonIds) { var options = new IO.Options(); options.Transports = Quobject.Collections.Immutable.ImmutableList.Create <string>("websocket"); var socket = IO.Socket("http://pokezz.com", options); var hasError = true; ManualResetEventSlim waitforbroadcast = new ManualResetEventSlim(false); List <PokemonLocation_pokezz> pokemons = new List <PokemonLocation_pokezz>(); socket.On("a", (msg) => { hasError = false; socket.Close(); string[] pokemonDefinitions = ((String)msg).Split('~'); foreach (var pokemonDefinition in pokemonDefinitions) { try { string[] pokemonDefinitionElements = pokemonDefinition.Split('|'); PokemonLocation_pokezz pokezzElement = new PokemonLocation_pokezz(); pokezzElement.name = (PokemonId)Convert.ToInt32(pokemonDefinitionElements[0], CultureInfo.InvariantCulture); pokezzElement.lat = Convert.ToDouble(pokemonDefinitionElements[1], CultureInfo.InvariantCulture); pokezzElement.lng = Convert.ToDouble(pokemonDefinitionElements[2], CultureInfo.InvariantCulture); pokezzElement.time = Convert.ToDouble(pokemonDefinitionElements[3], CultureInfo.InvariantCulture); pokezzElement.verified = (pokemonDefinitionElements[4] == "0") ? false : true; pokezzElement.iv = pokemonDefinitionElements[5]; pokemons.Add(pokezzElement); } catch (Exception) { // Just in case Pokezz changes their implementation, let's catch the error and set the error flag. hasError = true; } } waitforbroadcast.Set(); }); socket.On(Quobject.SocketIoClientDotNet.Client.Socket.EVENT_ERROR, () => { socket.Close(); waitforbroadcast.Set(); }); socket.On(Quobject.SocketIoClientDotNet.Client.Socket.EVENT_CONNECT_ERROR, () => { socket.Close(); waitforbroadcast.Set(); }); waitforbroadcast.Wait(5000); // Wait a maximum of 5 seconds for Pokezz to respond. socket.Close(); if (!hasError) { foreach (var pokemon in pokemons) { var SnipInfo = new SniperInfo(); SnipInfo.Id = pokemon.name; SnipInfo.Latitude = pokemon.lat; SnipInfo.Longitude = pokemon.lng; SnipInfo.TimeStampAdded = DateTime.Now; SnipInfo.ExpirationTimestamp = new DateTime(1970, 1, 1, 0, 0, 0, 0).AddSeconds(pokemon.time).ToLocalTime(); SnipInfo.IV = pokemon._iv; if (pokemon.verified || !session.LogicSettings.GetOnlyVerifiedSniperInfoFromPokezz) { SnipeLocations.Add(SnipInfo); } } var locationsToSnipe = SnipeLocations?.Where(q => (!session.LogicSettings.UseTransferIvForSnipe || (q.IV == 0 && !session.LogicSettings.SnipeIgnoreUnknownIv) || (q.IV >= session.Inventory.GetPokemonTransferFilter(q.Id).KeepMinIvPercentage)) && !LocsVisited.Contains(new PokemonLocation(q.Latitude, q.Longitude)) && !(q.ExpirationTimestamp != default(DateTime) && q.ExpirationTimestamp > new DateTime(2016) && // make absolutely sure that the server sent a correct datetime q.ExpirationTimestamp < DateTime.Now) && (q.Id == PokemonId.Missingno || pokemonIds.Contains(q.Id))).ToList() ?? new List <SniperInfo>(); return(locationsToSnipe.OrderBy(q => q.ExpirationTimestamp).ToList()); } else { session.EventDispatcher.Send(new ErrorEvent { Message = "(Pokezz.com) Connection Error" }); return(null); } }
private static List<SniperInfo> GetSniperInfoFrom_pokezz(ISession session, List<PokemonId> pokemonIds) { var options = new IO.Options(); options.Transports = Quobject.Collections.Immutable.ImmutableList.Create<string>("websocket"); var socket = IO.Socket("http://pokezz.com", options); var hasError = true; ManualResetEventSlim waitforbroadcast = new ManualResetEventSlim(false); List<PokemonLocation_pokezz> pokemons = new List<PokemonLocation_pokezz>(); socket.On("a", (msg) => { hasError = false; socket.Close(); string[] pokemonDefinitions = ((String)msg).Split('~'); foreach (var pokemonDefinition in pokemonDefinitions) { try { string[] pokemonDefinitionElements = pokemonDefinition.Split('|'); PokemonLocation_pokezz pokezzElement = new PokemonLocation_pokezz(); pokezzElement.name = (PokemonId)Convert.ToInt32(pokemonDefinitionElements[0], CultureInfo.InvariantCulture); pokezzElement.lat = Convert.ToDouble(pokemonDefinitionElements[1], CultureInfo.InvariantCulture); pokezzElement.lng = Convert.ToDouble(pokemonDefinitionElements[2], CultureInfo.InvariantCulture); pokezzElement.time = Convert.ToDouble(pokemonDefinitionElements[3], CultureInfo.InvariantCulture); pokezzElement.verified = (pokemonDefinitionElements[4] == "0") ? false : true; pokezzElement.iv = pokemonDefinitionElements[5]; pokemons.Add(pokezzElement); } catch(Exception) { // Just in case Pokezz changes their implementation, let's catch the error and set the error flag. hasError = true; } } waitforbroadcast.Set(); }); socket.On(Quobject.SocketIoClientDotNet.Client.Socket.EVENT_ERROR, () => { socket.Close(); waitforbroadcast.Set(); }); socket.On(Quobject.SocketIoClientDotNet.Client.Socket.EVENT_CONNECT_ERROR, () => { socket.Close(); waitforbroadcast.Set(); }); waitforbroadcast.Wait(5000); // Wait a maximum of 5 seconds for Pokezz to respond. socket.Close(); if (!hasError) { foreach (var pokemon in pokemons) { var SnipInfo = new SniperInfo(); SnipInfo.Id = pokemon.name; SnipInfo.Latitude = pokemon.lat; SnipInfo.Longitude = pokemon.lng; SnipInfo.TimeStampAdded = DateTime.Now; SnipInfo.ExpirationTimestamp = new DateTime(1970, 1, 1, 0, 0, 0, 0).AddSeconds(pokemon.time).ToLocalTime(); SnipInfo.IV = pokemon._iv; if (pokemon.verified || !session.LogicSettings.GetOnlyVerifiedSniperInfoFromPokezz) SnipeLocations.Add(SnipInfo); } var locationsToSnipe = SnipeLocations?.Where(q => (!session.LogicSettings.UseTransferIvForSnipe || (q.IV == 0 && !session.LogicSettings.SnipeIgnoreUnknownIv) || (q.IV >= session.Inventory.GetPokemonTransferFilter(q.Id).KeepMinIvPercentage)) && !LocsVisited.Contains(new PokemonLocation(q.Latitude, q.Longitude)) && !(q.ExpirationTimestamp != default(DateTime) && q.ExpirationTimestamp > new DateTime(2016) && // make absolutely sure that the server sent a correct datetime q.ExpirationTimestamp < DateTime.Now) && (q.Id == PokemonId.Missingno || pokemonIds.Contains(q.Id))).ToList() ?? new List<SniperInfo>(); return locationsToSnipe.OrderBy(q => q.ExpirationTimestamp).ToList(); } else { session.EventDispatcher.Send(new ErrorEvent {Message = "(Pokezz.com) Connection Error"}); return null; } }