Beispiel #1
0
        public Client(ISettings settings, IApiFailureStrategy apiFailureStrategy)
        {
            Settings          = settings;
            ApiFailure        = apiFailureStrategy;
            Proxy             = InitProxy();
            PokemonHttpClient = new PokemonHttpClient();
            Login             = new Rpc.Login(this);
            Player            = new Player(this);
            Download          = new Download(this);
            Inventory         = new Inventory(this);
            Map       = new Map(this);
            Fort      = new Fort(this);
            Encounter = new Encounter(this);
            Misc      = new Misc(this);

            Player.SetCoordinates(Settings.DefaultLatitude, Settings.DefaultLongitude, Settings.DefaultAltitude);

            InventoryLastUpdateTimestamp = 0;

            Platform = settings.DevicePlatform.Equals("ios", StringComparison.Ordinal) ? Platform.Ios : Platform.Android;

            AppVersion   = 3500;
            SettingsHash = "";

            CurrentApiEmulationVersion = new Version("0.35.0");
        }
Beispiel #2
0
        public Client(ISettings settings, IApiFailureStrategy apiFailureStrategy)
        {
            //handle initial session hash
            Random = new Random(DateTime.Now.Millisecond);
            GenerateNewSessionHash();

            //setup
            Settings   = settings;
            ApiFailure = apiFailureStrategy;
            if (settings.UseProxy)
            {
                InitProxy(settings);
            }
            PokemonHttpClient = new PokemonHttpClient(settings);
            Login             = new Rpc.Login(this);
            Player            = new Rpc.Player(this);
            Download          = new Rpc.Download(this);
            Inventory         = new Rpc.Inventory(this);
            Map       = new Rpc.Map(this);
            Fort      = new Rpc.Fort(this);
            Encounter = new Rpc.Encounter(this);
            Misc      = new Rpc.Misc(this);

            //player coords
            Player.SetCoordinates(Settings.DefaultLatitude, Settings.DefaultLongitude, Settings.DefaultAltitude);
        }
        public static async Task <TResponsePayload> PostProtoPayload <TRequest, TResponsePayload>(
            this System.Net.Http.HttpClient client,
            string url, RequestEnvelope requestEnvelope, IApiFailureStrategy strategy)
            where TRequest : IMessage <TRequest>
            where TResponsePayload : IMessage <TResponsePayload>, new()
        {
            var attempts = 0;
            ResponseEnvelope response;

            do
            {
                Debug.WriteLine($"Requesting {typeof(TResponsePayload).Name}");
                Thread.Sleep(300);
                response = await PostProto <TRequest>(client, url, requestEnvelope);

                //Decode payload
                //todo: multi-payload support
                attempts++;
            } while (response.Returns.Count == 0 && attempts < 10);
            if (attempts >= 10)
            {
                Console.WriteLine($"Failed to request packet {typeof(TResponsePayload).Name}");
                return(new TResponsePayload());
            }

            var payload       = response.Returns[0];
            var parsedPayload = new TResponsePayload();

            parsedPayload.MergeFrom(payload);
            return(parsedPayload);
        }
Beispiel #4
0
        public ApiClient(IApiFailureStrategy apiFailure, ISettings settings)
        {
            ApiFailure = apiFailure;
            Settings   = settings;
            AuthType   = settings.AuthType;

            CurrentAltitude  = settings.DefaultAltitude;
            CurrentLongitude = settings.DefaultLongitude;
            CurrentLatitude  = settings.DefaultLatitude;
        }
Beispiel #5
0
        public Client(ISettings settings, IApiFailureStrategy apiFailureStrategy)
        {
            Settings   = settings;
            ApiFailure = apiFailureStrategy;

            Login     = new Rpc.Login(this);
            Player    = new Rpc.Player(this);
            Download  = new Rpc.Download(this);
            Inventory = new Rpc.Inventory(this);
            Map       = new Rpc.Map(this);
            Fort      = new Rpc.Fort(this);
            Encounter = new Rpc.Encounter(this);
            Misc      = new Rpc.Misc(this);

            Player.SetCoordinates(Settings.DefaultLatitude, Settings.DefaultLongitude, Settings.DefaultAltitude);
        }
Beispiel #6
0
        public Client(ISettings settings, IApiFailureStrategy apiFailureStrategy)
        {
            Settings = settings;
            ApiFailure = apiFailureStrategy;

            Login = new Rpc.Login(this);
            Player = new Rpc.Player(this);
            Download = new Rpc.Download(this);
            Inventory = new Rpc.Inventory(this);
            Map = new Rpc.Map(this);
            Fort = new Rpc.Fort(this);
            Encounter = new Rpc.Encounter(this);
            Misc = new Rpc.Misc(this);

            Player.SetCoordinates(Settings.DefaultLatitude, Settings.DefaultLongitude, Settings.DefaultAltitude);
        }
        public static async Task <IMessage[]> PostProtoPayload <TRequest>(this System.Net.Http.HttpClient client,
                                                                          string url, RequestEnvelope requestEnvelope,
                                                                          IApiFailureStrategy strategy,
                                                                          params Type[] responseTypes) where TRequest : IMessage <TRequest>
        {
            var result = new IMessage[responseTypes.Length];

            for (var i = 0; i < responseTypes.Length; i++)
            {
                result[i] = Activator.CreateInstance(responseTypes[i]) as IMessage;
                if (result[i] == null)
                {
                    throw new ArgumentException($"ResponseType {i} is not an IMessage");
                }
            }

            //check if the last request was sent less than 350ms ago
            if (_delayTime.HasValue && _delayTime.Value > DateTime.Now)
            {
                //delay as needed
                await Task.Delay(_delayTime.Value.Subtract(DateTime.Now));
            }

            ResponseEnvelope response;

            while ((response = await PostProto <TRequest>(client, url, requestEnvelope)).Returns.Count != responseTypes.Length)
            {
                var operation = await strategy.HandleApiFailure(requestEnvelope, response);

                if (operation == ApiOperation.Abort)
                {
                    throw new InvalidResponseException($"Expected {responseTypes.Length} responses, but got {response.Returns.Count} responses");
                }
            }

            //set _delay time ahed 350ms
            _delayTime = DateTime.Now.AddMilliseconds(450);

            strategy.HandleApiSuccess(requestEnvelope, response);

            for (var i = 0; i < responseTypes.Length; i++)
            {
                var payload = response.Returns[i];
                result[i].MergeFrom(payload);
            }
            return(result);
        }
Beispiel #8
0
        public Client(ISettings settings, IApiFailureStrategy apiFailureStrategy)
        {
            Settings          = settings;
            ApiFailure        = apiFailureStrategy;
            Proxy             = InitProxy();
            PokemonHttpClient = new PokemonHttpClient();
            Login             = new Rpc.Login(this);
            Player            = new Player(this);
            Download          = new Download(this);
            Inventory         = new Inventory(this);
            Map       = new Map(this);
            Fort      = new Fort(this);
            Encounter = new Encounter(this);
            Misc      = new Misc(this);

            Player.SetCoordinates(Settings.DefaultLatitude, Settings.DefaultLongitude, Settings.DefaultAltitude);
        }
        public RocketApiClientWrapper(ISettings settings, IApiFailureStrategy apiFailureStrategy)
        {
            Settings          = settings;
            ApiFailure        = apiFailureStrategy;
            Proxy             = InitProxy();
            PokemonHttpClient = new PokemonHttpClient();
            Login             = new PokemonGo.RocketAPI.Rpc.Login(_rocketClient);
            Player            = new PokemonGo.RocketAPI.Rpc.Player(_rocketClient);
            Download          = new PokemonGo.RocketAPI.Rpc.Download(_rocketClient);
            Inventory         = new PokemonGo.RocketAPI.Rpc.Inventory(_rocketClient);
            Map       = new PokemonGo.RocketAPI.Rpc.Map(_rocketClient);
            Fort      = new PokemonGo.RocketAPI.Rpc.Fort(_rocketClient);
            Encounter = new PokemonGo.RocketAPI.Rpc.Encounter(_rocketClient);
            Misc      = new PokemonGo.RocketAPI.Rpc.Misc(_rocketClient);

            Player.SetCoordinates(Settings.DefaultLatitude, Settings.DefaultLongitude, Settings.DefaultAltitude);
        }
Beispiel #10
0
        public Client(ISettings settings, IApiFailureStrategy apiFailureStrategy, IDeviceInfo deviceInfo)
        {
            Settings   = settings;
            ApiFailure = apiFailureStrategy;

            Login      = new Rpc.Login(this);
            Player     = new Player(this);
            Download   = new Download(this);
            Inventory  = new Inventory(this);
            Map        = new Map(this);
            Fort       = new Fort(this);
            Encounter  = new Encounter(this);
            Misc       = new Misc(this);
            DeviceInfo = deviceInfo;

            Player.SetCoordinates(Settings.DefaultLatitude, Settings.DefaultLongitude, Settings.DefaultAltitude);
        }
Beispiel #11
0
        public GoBot(ISettingsHandler settings,
                     IPokemonItems pokemonItems,
                     IPokestopsHandler pokestopsHandler,
                     ITransferPokemonHandler transferPokemonHandler,
                     IRecycleItemsHandler recycleItemsHandler,
                     IEvolvePokemonHandler evolvePokemonHandler,
                     IApiFailureStrategy apiStrategyHandler,
                     ILogger logger)
        {
            _settings               = settings;
            _pokemonItems           = pokemonItems;
            _pokestopsHandler       = pokestopsHandler;
            _transferPokemonHandler = transferPokemonHandler;
            _recycleItemsHandler    = recycleItemsHandler;
            _evolvePokemonHandler   = evolvePokemonHandler;
            _apiStrategyHandler     = apiStrategyHandler;
            _logger = logger;

            InitializeClient();
        }
Beispiel #12
0
        public static async Task <IMessage[]> PostProtoPayload <TRequest>(this System.Net.Http.HttpClient client,
                                                                          string url, RequestEnvelope requestEnvelope,
                                                                          IApiFailureStrategy strategy,
                                                                          params Type[] responseTypes) where TRequest : IMessage <TRequest>
        {
            var result = new IMessage[responseTypes.Length];

            for (var i = 0; i < responseTypes.Length; i++)
            {
                result[i] = Activator.CreateInstance(responseTypes[i]) as IMessage;
                if (result[i] == null)
                {
                    throw new ArgumentException($"ResponseType {i} is not an IMessage");
                }
            }

            ResponseEnvelope response;

            while ((response = await PostProto <TRequest>(client, url, requestEnvelope)).Returns.Count != responseTypes.Length)
            {
                var operation = await strategy.HandleApiFailure(requestEnvelope, response);

                if (operation == ApiOperation.Abort)
                {
                    throw new InvalidResponseException($"Expected {responseTypes.Length} responses, but got {response.Returns.Count} responses");
                }
            }

            strategy.HandleApiSuccess(requestEnvelope, response);

            for (var i = 0; i < responseTypes.Length; i++)
            {
                var payload = response.Returns[i];
                result[i].MergeFrom(payload);
            }

            //Logger.Error(result.ToString());

            return(result);
        }
Beispiel #13
0
        public static async Task <TResponsePayload> PostProtoPayload <TRequest, TResponsePayload>(
            this System.Net.Http.HttpClient client,
            string url, RequestEnvelope requestEnvelope, IApiFailureStrategy strategy)
            where TRequest : IMessage <TRequest>
            where TResponsePayload : IMessage <TResponsePayload>, new()
        {
            Debug.WriteLine($"Requesting {typeof(TResponsePayload).Name}");
            var urlArray = new[] { url };
            var response = await PostProto <TRequest>(client, url, requestEnvelope);

            while (response.Returns.Count == 0)
            {
                var operation = await strategy.HandleApiFailure(urlArray, requestEnvelope, response);

                if (operation == ApiOperation.Abort)
                {
                    break;
                }

                response = await PostProto <TRequest>(client, urlArray[0], requestEnvelope);
            }

            // TODO: statuscode = 3 probably means ban!
            if (response.Returns.Count == 0)
            {
                throw new InvalidResponseException();
            }

            strategy.HandleApiSuccess(requestEnvelope, response);

            //Decode payload
            //todo: multi-payload support
            var payload       = response.Returns[0];
            var parsedPayload = new TResponsePayload();

            parsedPayload.MergeFrom(payload);

            return(parsedPayload);
        }
Beispiel #14
0
        public static async Task <TResponsePayload> PostProtoPayload <TRequest, TResponsePayload>(
            this System.Net.Http.HttpClient client,
            string url, RequestEnvelope requestEnvelope, IApiFailureStrategy strategy)
            where TRequest : IMessage <TRequest>
            where TResponsePayload : IMessage <TResponsePayload>, new()
        {
            Debug.WriteLine($"Requesting {typeof(TResponsePayload).Name}");
            var response = await PerformThrottledRemoteProcedureCall <TRequest>(client, url, requestEnvelope).ConfigureAwait(false);

            while (response.Returns.Count == 0)
            {
                var operation = await strategy.HandleApiFailure(requestEnvelope, response).ConfigureAwait(false);

                if (operation == ApiOperation.Abort)
                {
                    break;
                }

                response = await PerformThrottledRemoteProcedureCall <TRequest>(client, url, requestEnvelope).ConfigureAwait(false);
            }

            if (response.Returns.Count == 0)
            {
                throw new InvalidResponseException();
            }

            strategy.HandleApiSuccess(requestEnvelope, response);

            //Decode payload
            //todo: multi-payload support
            var payload       = response.Returns[0];
            var parsedPayload = new TResponsePayload();

            parsedPayload.MergeFrom(payload);

            return(parsedPayload);
        }
        public static TResponsePayload PostProtoPayload <TRequest, TResponsePayload>(
            this System.Net.Http.HttpClient httpClient,
            string url, RequestEnvelope requestEnvelope, IApiFailureStrategy strategy)
            where TRequest : IMessage <TRequest>
            where TResponsePayload : IMessage <TResponsePayload>, new()
        {
            var response = PerformThrottledRemoteProcedureCall <TRequest>(httpClient, url, requestEnvelope).Result;

            while (response.Returns.Count == 0)
            {
                Logger.Debug("Handling Failure");
                var operation = strategy.HandleApiFailure(requestEnvelope, response);

                if (operation == ApiOperation.Abort)
                {
                    break;
                }

                response = PerformThrottledRemoteProcedureCall <TRequest>(httpClient, url, requestEnvelope).Result;
            }

            if (response.Returns.Count == 0)
            {
                throw new InvalidResponseException();
            }

            strategy.HandleApiSuccess(requestEnvelope, response);

            //Decode payload
            //TODO: multi-payload support
            var payload       = response.Returns[0];
            var parsedPayload = new TResponsePayload();

            parsedPayload.MergeFrom(payload);

            return(parsedPayload);
        }
Beispiel #16
0
 public void setFailure(IApiFailureStrategy fail)
 {
     ApiFailure = fail;
 }
Beispiel #17
0
 public void setFailure(IApiFailureStrategy fail)
 {
     ApiFailure = fail;
 }