@@ -26,7 +26,8 @@ public static void Init(LootLockerBaseServerAPI childType)
26
26
}
27
27
28
28
protected Func < IEnumerator , System . Object > StartCoroutine ;
29
-
29
+ int maxRetry = 3 ;
30
+ int tries = 0 ;
30
31
/// <summary>
31
32
/// This would be something like "www.mydomain.com" or "api.mydomain.com". But you could also directly supply the IPv4 address of the server to speed the calls up a little bit by bypassing DNS Lookup
32
33
/// </summary>
@@ -93,20 +94,18 @@ IEnumerator coroutine()
93
94
94
95
try
95
96
{
96
- #if UNITY_EDITOR
97
97
LootLockerSDKManager . DebugMessage ( "Server Response: " + request . httpMethod + " " + request . endpoint + " completed in " + ( Time . time - startTime ) . ToString ( "n4" ) + " secs.\n Response: " + webRequest . downloadHandler . text ) ;
98
- #endif
99
98
}
100
99
catch
101
100
{
102
- LootLockerSDKManager . DebugMessage ( request . httpMethod . ToString ( ) , true ) ;
103
- LootLockerSDKManager . DebugMessage ( request . endpoint , true ) ;
104
- LootLockerSDKManager . DebugMessage ( webRequest . downloadHandler . text , true ) ;
101
+ LootLockerSDKManager . DebugMessage ( request . httpMethod . ToString ( ) , true ) ;
102
+ LootLockerSDKManager . DebugMessage ( request . endpoint , true ) ;
103
+ LootLockerSDKManager . DebugMessage ( webRequest . downloadHandler . text , true ) ;
105
104
}
106
105
107
106
LootLockerResponse response = new LootLockerResponse ( ) ;
108
107
response . statusCode = ( int ) webRequest . responseCode ;
109
- if ( webRequest . isHttpError || webRequest . isNetworkError || ! string . IsNullOrEmpty ( webRequest . error ) )
108
+ if ( webRequest . result == UnityWebRequest . Result . ProtocolError || webRequest . result == UnityWebRequest . Result . ConnectionError || ! string . IsNullOrEmpty ( webRequest . error ) )
110
109
{
111
110
switch ( webRequest . responseCode )
112
111
{
@@ -147,23 +146,28 @@ IEnumerator coroutine()
147
146
response . Error = "Service Unavailable -- We're either offline for maintenance, or an error that should be solvable by calling again later was triggered." ;
148
147
break ;
149
148
}
150
- #if UNITY_EDITOR
149
+
151
150
LootLockerSDKManager . DebugMessage ( "Response code: " + webRequest . responseCode ) ;
152
- #endif
153
- if ( webRequest . responseCode != 401 || ! LootLockerConfig . current . allowTokenRefresh )
151
+
152
+
153
+ if ( ( webRequest . responseCode == 401 || webRequest . responseCode == 403 ) && LootLockerConfig . current . allowTokenRefresh && LootLockerConfig . current . platform != LootLockerConfig . platformType . Steam
154
+ && tries < maxRetry )
154
155
{
155
- response . Error += " " + webRequest . downloadHandler . text ;
156
- response . text = webRequest . downloadHandler . text ;
156
+ tries ++ ;
157
+ LootLockerSDKManager . DebugMessage ( "Refreshing Token, Since we could not find out. If you do not want this please turn off in the lootlocker config settings" ) ;
158
+ RefreshTokenAndCompleteCall ( request , ( value ) => { tries = 0 ; OnServerResponse ? . Invoke ( value ) ; } ) ;
157
159
}
158
160
else
159
161
{
160
- RefreshTokenAndCompleteCall ( request , OnServerResponse ) ;
161
- }
162
+ tries = 0 ;
163
+ response . Error += " " + webRequest . downloadHandler . text ;
164
+ response . text = webRequest . downloadHandler . text ;
162
165
163
- response . status = false ;
164
- response . hasError = true ;
165
- response . text = webRequest . downloadHandler . text ;
166
- OnServerResponse ? . Invoke ( response ) ;
166
+ response . status = false ;
167
+ response . hasError = true ;
168
+ response . text = webRequest . downloadHandler . text ;
169
+ OnServerResponse ? . Invoke ( response ) ;
170
+ }
167
171
168
172
}
169
173
else
@@ -173,6 +177,7 @@ IEnumerator coroutine()
173
177
response . text = webRequest . downloadHandler . text ;
174
178
OnServerResponse ? . Invoke ( response ) ;
175
179
}
180
+
176
181
}
177
182
}
178
183
}
@@ -223,7 +228,7 @@ protected IEnumerator DoDownloadTexture2D(string url, System.Action<Texture2D> O
223
228
224
229
if ( texture == null )
225
230
{
226
- LootLockerSDKManager . DebugMessage ( "Texture download failed for: " + url , true ) ;
231
+ LootLockerSDKManager . DebugMessage ( "Texture download failed for: " + url , true ) ;
227
232
}
228
233
229
234
OnComplete ? . Invoke ( texture ) ;
@@ -255,25 +260,25 @@ UnityWebRequest CreateWebRequest(string url, LootLockerServerRequest request)
255
260
byte [ ] formSections = UnityWebRequest . SerializeFormSections ( form , boundary ) ;
256
261
// Set the content type - NO QUOTES around the boundary
257
262
string contentType = String . Concat ( "multipart/form-data; boundary=--" , Encoding . UTF8 . GetString ( boundary ) ) ;
258
-
263
+
259
264
//Debug.LogError("Content type Set: " + contentType);
260
265
// Make my request object and add the raw body. Set anything else you need here
261
266
webRequest = new UnityWebRequest ( ) ;
262
267
webRequest . SetRequestHeader ( "Content-Type" , "multipart/form-data; boundary=--" ) ;
263
- webRequest . uri = new Uri ( url ) ;
268
+ webRequest . uri = new Uri ( url ) ;
264
269
Debug . Log ( url ) ; //the url is wrong in some cases
265
270
webRequest . uploadHandler = new UploadHandlerRaw ( formSections ) ;
266
271
webRequest . uploadHandler . contentType = contentType ;
267
272
webRequest . useHttpContinue = false ;
268
-
273
+
269
274
// webRequest.method = "POST";
270
275
webRequest . method = UnityWebRequest . kHttpVerbPOST ;
271
276
}
272
277
else
273
278
{
274
279
string json = ( request . payload != null && request . payload . Count > 0 ) ? JsonConvert . SerializeObject ( request . payload ) : request . jsonPayload ;
275
280
#if UNITY_EDITOR
276
- LootLockerSDKManager . DebugMessage ( "REQUEST BODY = " + json ) ;
281
+ LootLockerSDKManager . DebugMessage ( "REQUEST BODY = " + json ) ;
277
282
#endif
278
283
byte [ ] bytes = System . Text . Encoding . UTF8 . GetBytes ( string . IsNullOrEmpty ( json ) ? "{}" : json ) ;
279
284
webRequest = UnityWebRequest . Put ( url , bytes ) ;
0 commit comments