97 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			C#
		
	
	
	
		
		
			
		
	
	
			97 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			C#
		
	
	
	
|  | namespace SRDebugger.Internal | |||
|  | { | |||
|  |     using System.Collections.Generic; | |||
|  |     using System.IO; | |||
|  |     using System.Net; | |||
|  |     using SRF; | |||
|  | 
 | |||
|  |     public static class SRDebugApiUtil | |||
|  |     { | |||
|  |         public static string ParseErrorException(WebException ex) | |||
|  |         { | |||
|  |             if (ex.Response == null) | |||
|  |             { | |||
|  |                 return ex.Message; | |||
|  |             } | |||
|  | 
 | |||
|  |             try | |||
|  |             { | |||
|  |                 var response = ReadResponseStream(ex.Response); | |||
|  | 
 | |||
|  |                 return ParseErrorResponse(response); | |||
|  |             } | |||
|  |             catch | |||
|  |             { | |||
|  |                 return ex.Message; | |||
|  |             } | |||
|  |         } | |||
|  | 
 | |||
|  |         public static string ParseErrorResponse(string response, string fallback = "Unexpected Response") | |||
|  |         { | |||
|  |             try | |||
|  |             { | |||
|  |                 var jsonTable = (Dictionary<string, object>) Json.Deserialize(response); | |||
|  | 
 | |||
|  |                 var error = ""; | |||
|  | 
 | |||
|  |                 error += jsonTable["errorMessage"]; | |||
|  | 
 | |||
|  |                 object value; | |||
|  | 
 | |||
|  |                 if (jsonTable.TryGetValue("errors", out value) && value is IList<object>) | |||
|  |                 { | |||
|  |                     var errors = value as IList<object>; | |||
|  | 
 | |||
|  |                     foreach (var e in errors) | |||
|  |                     { | |||
|  |                         error += "\n"; | |||
|  |                         error += e; | |||
|  |                     } | |||
|  |                 } | |||
|  | 
 | |||
|  |                 return error; | |||
|  |             } | |||
|  |             catch | |||
|  |             { | |||
|  |                 if (response.Contains("<html>")) | |||
|  |                 { | |||
|  |                     return fallback; | |||
|  |                 } | |||
|  | 
 | |||
|  |                 return response; | |||
|  |             } | |||
|  |         } | |||
|  | 
 | |||
|  | #if UNITY_EDITOR || (!NETFX_CORE && !UNITY_WINRT) | |||
|  | 
 | |||
|  |         public static bool ReadResponse(HttpWebRequest request, out string result) | |||
|  |         { | |||
|  |             try | |||
|  |             { | |||
|  |                 var response = request.GetResponse(); | |||
|  |                 result = ReadResponseStream(response); | |||
|  | 
 | |||
|  |                 return true; | |||
|  |             } | |||
|  |             catch (WebException e) | |||
|  |             { | |||
|  |                 result = ParseErrorException(e); | |||
|  |                 return false; | |||
|  |             } | |||
|  |         } | |||
|  | 
 | |||
|  | #endif | |||
|  | 
 | |||
|  |         public static string ReadResponseStream(WebResponse stream) | |||
|  |         { | |||
|  |             using (var responseSteam = stream.GetResponseStream()) | |||
|  |             { | |||
|  |                 using (var streamReader = new StreamReader(responseSteam)) | |||
|  |                 { | |||
|  |                     return streamReader.ReadToEnd(); | |||
|  |                 } | |||
|  |             } | |||
|  |         } | |||
|  |     } | |||
|  | } |