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"); }
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); }
public ApiClient(IApiFailureStrategy apiFailure, ISettings settings) { ApiFailure = apiFailure; Settings = settings; AuthType = settings.AuthType; CurrentAltitude = settings.DefaultAltitude; CurrentLongitude = settings.DefaultLongitude; CurrentLatitude = settings.DefaultLatitude; }
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); }
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); }
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); }
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(); }
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); }
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); }
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); }
public void setFailure(IApiFailureStrategy fail) { ApiFailure = fail; }