public void Start()
        {
            _webSocketServer = new WebSocketServer();
            SuperSocket.SocketBase.Config.RootConfig rootConfig = new SuperSocket.SocketBase.Config.RootConfig();
            var serverConfig = new SuperSocket.SocketBase.Config.ServerConfig();

            serverConfig.Name                = "PokeFeeder";
            serverConfig.ServerTypeName      = "WebSocketService";
            serverConfig.Ip                  = "Any";
            serverConfig.Port                = GlobalSettings.OutgoingServerPort;
            serverConfig.MaxRequestLength    = 4096;
            serverConfig.MaxConnectionNumber = 100 * 1000;
            serverConfig.SendingQueueSize    = 25;
            serverConfig.SendTimeOut         = 5000;
            var socketServerFactory = new SuperSocket.SocketEngine.SocketServerFactory();

            _webSocketServer.Setup(rootConfig, serverConfig, socketServerFactory);
            _webSocketServer.Start();
            _webSocketServer.NewMessageReceived  += new SessionHandler <WebSocketSession, string>(socketServer_NewMessageReceived);
            _webSocketServer.NewSessionConnected += socketServer_NewSessionConnected;
            _webSocketServer.SessionClosed       += socketServer_SessionClosed;

            UpdateTitle();
            var pokemonIds = GlobalSettings.UseFilter
? PokemonParser.ParsePokemons(new List <string>(GlobalSettings.PokekomsToFeedFilter))
: Enum.GetValues(typeof(PokemonId)).Cast <PokemonId>().ToList();

            _serverUploadFilter = ServerUploadFilterFactory.Create(pokemonIds);
        }
        public static List <SniperInfo> FilterNonAvailableAndUpdateMissingPokemonId(List <SniperInfo> sniperInfos)
        {
            if (!GlobalSettings.VerifyOnSkiplagged)
            {
                return(sniperInfos);
            }
            var newSniperInfos      = new List <SniperInfo>();
            var filteredSniperInfos = SkipLaggedCache.FindUnSentMessages(sniperInfos);

            foreach (var sniperInfo in filteredSniperInfos)
            {
                var scanResult = ScanLocation(new GeoCoordinates(sniperInfo.Latitude, sniperInfo.Longitude));
                if (scanResult.Status == "fail" || scanResult.Status == "error")
                {
                    sniperInfo.Verified = false;
                    newSniperInfos.Add(sniperInfo);
                }
                else if (scanResult.pokemons != null)
                {
                    var st = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
                    var t  = DateTime.Now.ToUniversalTime() - st;
                    var currentTimestamp  = t.TotalMilliseconds;
                    var pokemonsToFeed    = PokemonParser.ParsePokemons(GlobalSettings.PokekomsToFeedFilter);
                    var filteredPokemon   = scanResult.pokemons.Where(q => pokemonsToFeed.Contains(PokemonParser.ParseById(q.pokemon_id)));
                    var notExpiredPokemon = filteredPokemon.Where(q => q.expires < currentTimestamp);

                    if (notExpiredPokemon.Any())
                    {
                        foreach (var pokemonLocation in notExpiredPokemon)
                        {
                            SniperInfo newSniperInfo = new SniperInfo();

                            if (sniperInfo.Id.Equals(pokemonLocation.Id))
                            {
                                newSniperInfo.IV = sniperInfo.IV;
                            }
                            newSniperInfo.Id                  = PokemonParser.ParseById(pokemonLocation.pokemon_id);
                            newSniperInfo.Latitude            = pokemonLocation.latitude;
                            newSniperInfo.Longitude           = pokemonLocation.longitude;
                            newSniperInfo.Verified            = true;
                            newSniperInfo.ExpirationTimestamp = FromUnixTime(pokemonLocation.expires);
                            newSniperInfos.Add(newSniperInfo);
                        }
                    }
                    else
                    {
                        Log.Trace($"No snipable pokemon found at {sniperInfo.Latitude.ToString(CultureInfo.InvariantCulture)},{sniperInfo.Longitude.ToString(CultureInfo.InvariantCulture)}");
                    }
                }
            }
            return(newSniperInfos);
        }
Example #3
0
        public static Filter Create(List <DiscordChannels> discordChannels = null)
        {
            List <PokemonId> pokemons = GlobalSettings.UseFilter
                ? PokemonParser.ParsePokemons(new List <string>(GlobalSettings.PokekomsToFeedFilter))
                : Enum.GetValues(typeof(PokemonId)).Cast <PokemonId>().ToList();
            var            pokemonsBinary = PokemonFilterToBinary.ToBinary(pokemons);
            List <Channel> channelInfos   = new List <Channel>();

            if (discordChannels != null && discordChannels.Any())
            {
                foreach (DiscordChannels discordChannel in discordChannels)
                {
                    channelInfos.Add(new Channel()
                    {
                        Server = discordChannel.Server, ChannelName = discordChannel.Name
                    });
                }
            }
            if (GlobalSettings.UsePokeSnipers)
            {
                channelInfos.Add(new Channel()
                {
                    Server = PokeSnipersRarePokemonRepository.Channel
                });
            }
            if (GlobalSettings.UsePokemonGoIVClub)
            {
                channelInfos.Add(new Channel()
                {
                    Server = PokemonGoIVClubRarePokemonRepository.Channel
                });
            }
            if (GlobalSettings.UsePokewatchers)
            {
                channelInfos.Add(new Channel()
                {
                    Server = PokeWatchersRarePokemonRepository.Channel
                });
            }
            if (GlobalSettings.UseTrackemon)
            {
                channelInfos.Add(new Channel()
                {
                    Server = TrackemonRarePokemonRepository.Channel
                });
            }
            if (GlobalSettings.UsePokezz)
            {
                channelInfos.Add(new Channel()
                {
                    Server = PokezzRarePokemonRepository.Channel
                });
            }
            if (GlobalSettings.UsePokeSnipe)
            {
                channelInfos.Add(new Channel()
                {
                    Server = PokeSnipeRarePokemonRepository.Channel
                });
            }
            channelInfos.Add(new Channel()
            {
                Server = Constants.PogoFeeder
            });
            channelInfos.Add(new Channel()
            {
                Server = Constants.Bot
            });

            var filter = new Filter();

            filter.Channels                    = channelInfos;
            filter.Pokemon                     = pokemonsBinary;
            filter.VerifiedOnly                = GlobalSettings.VerifiedOnly;
            filter.Version                     = Assembly.GetExecutingAssembly().GetName().Version.ToString();
            filter.AreaBounds                  = GlobalSettings.UseGeoLocationBoundsFilter ? GlobalSettings.GeoLocationBounds : null;
            filter.MinimumIV                   = GlobalSettings.MinimumIV;
            filter.UnverifiedOnly              = GlobalSettings.UnverifiedOnly;
            filter.UseUploadedPokemon          = GlobalSettings.UseUploadedPokemon;
            filter.PokemonNotInFilterMinimumIV = GlobalSettings.PokemonNotInFilterMinimumIV;
            return(filter);
        }
        public List <SniperInfo> FilterNonAvailableAndUpdateMissingPokemonId(List <SniperInfo> sniperInfos)
        {
            if (!GlobalSettings.VerifyOnSkiplagged)
            {
                return(sniperInfos);
            }
            if (!_skipLaggedWorking)
            {
                Log.Debug($"Skiplagged is marked as down, not checking {sniperInfos.Count} sniperInfos");
                return(sniperInfos);
            }
            var newSniperInfos = new List <SniperInfo>();

            foreach (var sniperInfo in sniperInfos)
            {
                if (sniperInfo.Verified)
                {
                    newSniperInfos.Add(sniperInfo);
                    continue;
                }
                var scanResult = ScanLocation(new GeoCoordinates(sniperInfo.Latitude, sniperInfo.Longitude));
                if (scanResult.Status == "fail" ||
                    scanResult.Status == "error" ||
                    scanResult.pokemons == null ||
                    !scanResult.pokemons.Any())
                {
                    sniperInfo.Verified = false;
                    newSniperInfos.Add(sniperInfo);
                }
                else if (scanResult.pokemons != null && scanResult.pokemons.Any())
                {
                    var st = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
                    var t  = DateTime.Now.ToUniversalTime() - st;
                    var currentTimestamp = t.TotalMilliseconds;
                    var pokemonsToFeed   = PokemonParser.ParsePokemons(GlobalSettings.PokekomsToFeedFilter);
                    var filteredPokemon  =
                        scanResult.pokemons.Where(q => pokemonsToFeed.Contains(PokemonParser.ParseById(q.pokemon_id)));
                    var notExpiredPokemon = filteredPokemon.Where(q => q.expires < currentTimestamp).ToList();

                    if (notExpiredPokemon.Any())
                    {
                        foreach (var pokemonLocation in notExpiredPokemon)
                        {
                            var newSniperInfo = new SniperInfo();

                            if (((long)sniperInfo.Id).Equals(pokemonLocation.Id))
                            {
                                newSniperInfo.IV = sniperInfo.IV;
                            }
                            newSniperInfo.Id          = PokemonParser.ParseById(pokemonLocation.pokemon_id);
                            newSniperInfo.Latitude    = Math.Round(pokemonLocation.latitude, 7);
                            newSniperInfo.Longitude   = Math.Round(pokemonLocation.longitude, 7);
                            newSniperInfo.Verified    = true;
                            newSniperInfo.VerifiedOn  = DateTime.Now;
                            newSniperInfo.ChannelInfo = sniperInfo.ChannelInfo;
                            var timeStamp = FromUnixTime(pokemonLocation.expires);
                            newSniperInfo.ExpirationTimestamp = DateTime.Now.AddMinutes(Constants.MaxExpirationInTheFuture) < timeStamp?DateTime.Now.AddMinutes(Constants.MaxExpirationInTheFuture) : timeStamp;

                            newSniperInfos.Add(newSniperInfo);
                        }
                    }
                    else
                    {
                        sniperInfo.Verified = false;
                        newSniperInfos.Add(sniperInfo);
                        Log.Trace(
                            $"No snipable pokemon found at {sniperInfo.Latitude.ToString(CultureInfo.InvariantCulture)},{sniperInfo.Longitude.ToString(CultureInfo.InvariantCulture)}");
                    }
                }
            }
            return(newSniperInfos);
        }