Update HttpClientExtensions.cs

Baha Striker [2016-07-29 06:35:56]
Update HttpClientExtensions.cs
Filename
PokemonGo/RocketAPI/Extensions/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.