Skip to content

Commit 7ac9ced

Browse files
committed
Correct way to send diagnostic JSON to API
1 parent b5d1e98 commit 7ac9ced

File tree

1 file changed

+24
-94
lines changed

1 file changed

+24
-94
lines changed

src/Services/BacktraceApi.cs

Lines changed: 24 additions & 94 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
using Backtrace.Unity.Common;
2-
using Backtrace.Unity.Interfaces;
1+
using Backtrace.Unity.Interfaces;
32
using Backtrace.Unity.Model;
43
using Newtonsoft.Json;
54
using System;
@@ -50,7 +49,7 @@ public BacktraceApi(BacktraceCredentials credentials, uint reportPerMin = 3)
5049
{
5150
throw new ArgumentException($"{nameof(BacktraceCredentials)} cannot be null");
5251
}
53-
_serverurl = $"{credentials.BacktraceHostUri.AbsoluteUri}post?format=json&token={credentials.Token}";
52+
_serverurl = $"{credentials.BacktraceHostUri.AbsoluteUri}post?format=json&token={credentials.Token}&_mod_sync=1";
5453
Debug.Log("server url : " + _serverurl);
5554
reportLimitWatcher = new ReportLimitWatcher(reportPerMin);
5655
}
@@ -95,103 +94,34 @@ public IEnumerator Send(BacktraceData data, Action<BacktraceResult> callback = n
9594

9695
private IEnumerator Send(string json, List<string> attachments, BacktraceReport report, Action<BacktraceResult> callback)
9796
{
98-
var requestId = Guid.NewGuid();
99-
var formData = new List<IMultipartFormSection>
97+
var request = new UnityWebRequest(_serverurl, "POST");
98+
byte[] bodyRaw = Encoding.UTF8.GetBytes(json);
99+
request.uploadHandler = (UploadHandler)new UploadHandlerRaw(bodyRaw);
100+
request.downloadHandler = (DownloadHandler)new DownloadHandlerBuffer();
101+
request.SetRequestHeader("Content-Type", "application/json");
102+
yield return request.SendWebRequest();
103+
104+
_result = request.responseCode == 200
105+
? new BacktraceResult()
106+
: BacktraceResult.OnError(report, new Exception(request.error));
107+
Debug.Log("CODE: " + request.responseCode);
108+
StringBuilder sb = new StringBuilder();
109+
var responseHeaders = request.GetResponseHeaders();
110+
if (responseHeaders != null)
100111
{
101-
new MultipartFormDataSection("upload_file.json", json, "application/json")
102-
};
103-
byte[] boundary = UnityWebRequest.GenerateBoundary();
104-
string boundaryString = Encoding.ASCII.GetString(boundary);
105-
Debug.Log("Generated boundary " + boundaryString);
106-
107-
using (var www = UnityWebRequest.Post(_serverurl, formData, boundary))
108-
{
109-
www.method = "POST";
110-
www.uploadHandler = (UploadHandler)new UploadHandlerRaw(boundary);
111-
www.downloadHandler = (DownloadHandler)new DownloadHandlerBuffer();
112-
www.SetRequestHeader("Content-Type", FormDataHelper.GetContentTypeWithBoundary(requestId));
113-
var response = www.responseCode;
114-
yield return www.SendWebRequest();
115-
_result = www.isNetworkError || www.isHttpError
116-
? BacktraceResult.OnError(report, new Exception(www.error))
117-
: new BacktraceResult();
118-
119-
StringBuilder sb = new StringBuilder();
120-
var responseHeaders = www.GetResponseHeaders();
121-
if (responseHeaders != null)
122-
{
123-
foreach (System.Collections.Generic.KeyValuePair<string, string> dict in www.GetResponseHeaders())
124-
{
125-
sb.Append(dict.Key).Append(": \t[").Append(dict.Value).Append("]\n");
126-
}
127-
128-
// Print Headers
129-
Debug.Log("RESPONSE: " + sb.ToString());
130-
}
131-
else
112+
foreach (KeyValuePair<string, string> dict in request.GetResponseHeaders())
132113
{
133-
Debug.Log("RESPONSE IS EMPTY");
114+
sb.Append(dict.Key).Append(": \t[").Append(dict.Value).Append("]\n");
134115
}
135-
callback?.Invoke(_result);
116+
Debug.Log("RESPONSE: " + sb.ToString());
136117
}
137-
118+
else
119+
{
120+
Debug.Log("RESPONSE IS EMPTY");
121+
}
122+
callback?.Invoke(_result);
138123
}
139124

140-
141-
//private BacktraceResult Send(Guid requestId, string json, List<string> attachments, BacktraceReport report)
142-
//{
143-
// var formData = FormDataHelper.GetFormData(json, attachments, requestId);
144-
// string contentType = FormDataHelper.GetContentTypeWithBoundary(requestId);
145-
// var request = WebRequest.Create(_serverurl) as HttpWebRequest;
146-
147-
// //Set up the request properties.
148-
// request.Method = "POST";
149-
// request.ContentType = contentType;
150-
// request.ContentLength = formData.Length;
151-
// try
152-
// {
153-
// using (Stream requestStream = request.GetRequestStream())
154-
// {
155-
// requestStream.Write(formData, 0, formData.Length);
156-
// requestStream.Close();
157-
// }
158-
// return ReadServerResponse(request, report);
159-
// }
160-
// catch (Exception exception)
161-
// {
162-
// OnServerError?.Invoke(exception);
163-
// return BacktraceResult.OnError(report, exception);
164-
// }
165-
//}
166-
167-
///// <summary>
168-
///// Handle server respond for synchronous request
169-
///// </summary>
170-
///// <param name="request">Current HttpWebRequest</param>
171-
//private BacktraceResult ReadServerResponse(HttpWebRequest request, BacktraceReport report)
172-
//{
173-
// using (WebResponse webResponse = request.GetResponse() as HttpWebResponse)
174-
// {
175-
// StreamReader responseReader = new StreamReader(webResponse.GetResponseStream());
176-
// string fullResponse = responseReader.ReadToEnd();
177-
// var response = JsonConvert.DeserializeObject<BacktraceResult>(fullResponse);
178-
// response.BacktraceReport = report;
179-
// OnServerResponse?.Invoke(response);
180-
// return response;
181-
// }
182-
//}
183-
//#endregion
184-
///// <summary>
185-
///// Get serialization settings
186-
///// </summary>
187-
///// <returns></returns>
188-
//private JsonSerializerSettings JsonSerializerSettings { get; } = new JsonSerializerSettings
189-
//{
190-
// NullValueHandling = NullValueHandling.Ignore,
191-
// DefaultValueHandling = DefaultValueHandling.Ignore
192-
//};
193-
194-
195125
public void SetClientRateLimitEvent(Action<BacktraceReport> onClientReportLimitReached)
196126
{
197127
reportLimitWatcher.OnClientReportLimitReached = onClientReportLimitReached;

0 commit comments

Comments
 (0)