Update HttpClientExtensions.cs
Update HttpClientExtensions.cs
diff --git a/PokemonGo/RocketAPI/Extensions/HttpClientExtensions.cs b/PokemonGo/RocketAPI/Extensions/HttpClientExtensions.cs
index ce6c5d7..81d97cb 100644
--- a/PokemonGo/RocketAPI/Extensions/HttpClientExtensions.cs
+++ b/PokemonGo/RocketAPI/Extensions/HttpClientExtensions.cs
@@ -1,4 +1,4 @@
-#region
+#region
using System.Net.Http;
using System.Threading.Tasks;
@@ -28,21 +28,41 @@ namespace PokemonGo.RocketAPI.Extensions
return decodedResponse;
}
- public static async Task<TResponsePayload> PostProtoPayload<TRequest, TResponsePayload>(this HttpClient client,
- string url, TRequest request) where TRequest : IMessage<TRequest>
- where TResponsePayload : IMessage<TResponsePayload>, new()
- {
- // ColoredConsoleWrite(ConsoleColor.Red, ($"[DEBUG] [{DateTime.Now.ToString("HH:mm:ss")}] requesting {typeof(TResponsePayload).Name}"));
- var response = await PostProto(client, url, request);
+ private static bool waitingForResponse = false;
+ public static async Task<TResponsePayload> PostProtoPayload<TRequest, TResponsePayload>(this HttpClient client,
+ string url, TRequest request) where TRequest : IMessage<TRequest>
+ where TResponsePayload : IMessage<TResponsePayload>, new()
+ {
+ ByteString payload = null;
- //Decode payload
- //todo: multi-payload support
- var payload = response.Payload[0];
- var parsedPayload = new TResponsePayload();
- parsedPayload.MergeFrom(payload);
+ while (waitingForResponse)
+ await Task.Delay(30);
+ waitingForResponse = true;
- return parsedPayload;
- }
+ Response response = null;
+ int count = 0;
+ do
+ {
+ count++;
+ ColoredConsoleWrite(ConsoleColor.Red, "ArgumentOutOfRangeException - Restarting");
+ ColoredConsoleWrite(ConsoleColor.Red, ($"[DEBUG] [{DateTime.Now.ToString("HH:mm:ss")}] requesting {typeof(TResponsePayload).Name}"));
+ response = await PostProto(client, url, request);
+ waitingForResponse = false;
+
+
+
+ //Decode payload
+ //todo: multi-payload support
+
+ await Task.Delay(30);// request every 30ms, up this value for not spam their server
+ } while (response.Payload.Count < 1 && count < 30);
+ payload = response.Payload[0];
+
+ var parsedPayload = new TResponsePayload();
+ parsedPayload.MergeFrom(payload);
+
+ return parsedPayload;
+ }
public static void ColoredConsoleWrite(ConsoleColor color, string text)
{
ConsoleColor originalColor = System.Console.ForegroundColor;
@@ -52,4 +72,4 @@ namespace PokemonGo.RocketAPI.Extensions
}
}
-}
\ No newline at end of file
+}
You may download the files in Public Git.