You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
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();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|