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();
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| }
 |