Skip to content

Commit 298db1d

Browse files
committed
refactor(RESTConnector): Simplified POST and DELETE using UnityWebRequest
1 parent 68f4497 commit 298db1d

File tree

2 files changed

+68
-133
lines changed

2 files changed

+68
-133
lines changed

Scripts/Connection/RESTConnector.cs

Lines changed: 64 additions & 131 deletions
Original file line numberDiff line numberDiff line change
@@ -249,6 +249,10 @@ public Request()
249249
/// This callback is invoked to provide upload progress.
250250
/// </summary>
251251
public ProgressEvent OnUploadProgress { get; set; }
252+
/// <summary>
253+
/// The http method for use with UnityWebRequest.
254+
/// </summary>
255+
public string HttpMethod { get; set; }
252256
#endregion
253257
}
254258
#endregion
@@ -342,7 +346,7 @@ private void AddHeaders(Dictionary<string, string> headers)
342346
{
343347
headers.Add(AUTHENTICATION_AUTHORIZATION_HEADER, Authentication.CreateAuthorization());
344348
}
345-
else if(Authentication.HasIamTokenData())
349+
else if (Authentication.HasIamTokenData())
346350
{
347351
headers.Add(AUTHENTICATION_AUTHORIZATION_HEADER, string.Format("Bearer {0}", Authentication.IamAccessToken));
348352
}
@@ -410,7 +414,7 @@ private IEnumerator ProcessRequestQueue()
410414
Response resp = new Response();
411415

412416
DateTime startTime = DateTime.Now;
413-
if (!req.Delete && !req.Post)
417+
if (string.IsNullOrEmpty(req.HttpMethod))
414418
{
415419
WWW www = null;
416420
if (req.Forms != null)
@@ -553,45 +557,14 @@ private IEnumerator ProcessRequestQueue()
553557

554558
www.Dispose();
555559
}
556-
else if(req.Post)
557-
{
558-
float timeout = Mathf.Max(Constants.Config.Timeout, req.Timeout);
559-
560-
PostRequest postReq = new PostRequest();
561-
Runnable.Run(postReq.Send(url, req.Headers));
562-
while (!postReq.IsComplete)
563-
{
564-
if (req.Cancel)
565-
break;
566-
if ((DateTime.Now - startTime).TotalSeconds > timeout)
567-
break;
568-
yield return null;
569-
}
570-
571-
if (req.Cancel)
572-
continue;
573-
574-
resp.Success = postReq.Success;
575-
resp.Data = postReq.Data;
576-
resp.Error = postReq.Error;
577-
resp.HttpResponseCode = postReq.HttpResponseCode;
578-
resp.ElapsedTime = (float)(DateTime.Now - startTime).TotalSeconds;
579-
resp.Headers = postReq.ResponseHeaders;
580-
if (req.OnResponse != null)
581-
req.OnResponse(req, resp);
582-
}
583560
else
584561
{
585-
586-
#if ENABLE_DEBUGGING
587-
Log.Debug("RESTConnector.ProcessRequestQueue90", "Delete Request URL: {0}", url);
588-
#endif
589-
590562
float timeout = Mathf.Max(Constants.Config.Timeout, req.Timeout);
563+
WatsonRequest watsonRequest = new WatsonRequest();
564+
watsonRequest.HttpMethod = req.HttpMethod;
565+
Runnable.Run(watsonRequest.Send(url, req.Headers));
591566

592-
DeleteRequest deleteReq = new DeleteRequest();
593-
Runnable.Run(deleteReq.Send(url, req.Headers));
594-
while (!deleteReq.IsComplete)
567+
while (!watsonRequest.IsComplete)
595568
{
596569
if (req.Cancel)
597570
break;
@@ -603,12 +576,12 @@ private IEnumerator ProcessRequestQueue()
603576
if (req.Cancel)
604577
continue;
605578

606-
resp.Success = deleteReq.Success;
607-
resp.Data = deleteReq.Data;
608-
resp.Error = deleteReq.Error;
609-
resp.HttpResponseCode = deleteReq.HttpResponseCode;
579+
resp.Success = watsonRequest.Success;
580+
resp.Data = watsonRequest.Data;
581+
resp.Error = watsonRequest.Error;
582+
resp.HttpResponseCode = watsonRequest.HttpResponseCode;
610583
resp.ElapsedTime = (float)(DateTime.Now - startTime).TotalSeconds;
611-
resp.Headers = deleteReq.ResponseHeaders;
584+
resp.Headers = watsonRequest.ResponseHeaders;
612585
if (req.OnResponse != null)
613586
req.OnResponse(req, resp);
614587
}
@@ -660,24 +633,50 @@ public static int ParseResponseCode(string statusLine)
660633

661634
return ret;
662635
}
636+
#endregion
663637

664-
private class DeleteRequest
638+
#region WatsonRequest
639+
private class WatsonRequest
665640
{
641+
/// <summary>
642+
/// The endpoint of the service.
643+
/// </summary>
666644
public string URL { get; set; }
645+
/// <summary>
646+
/// The http method of the call.
647+
/// </summary>
648+
public string HttpMethod { get; set; }
649+
/// <summary>
650+
/// The request headers.
651+
/// </summary>
667652
public Dictionary<string, string> Headers { get; set; }
653+
/// <summary>
654+
/// Is the request complete?
655+
/// </summary>
668656
public bool IsComplete { get; set; }
657+
/// <summary>
658+
/// Did the request succeed?
659+
/// </summary>
669660
public bool Success { get; set; }
661+
/// <summary>
662+
/// The http response code from the request.
663+
/// </summary>
670664
public long HttpResponseCode { get; set; }
665+
/// <summary>
666+
/// The response data from the request.
667+
/// </summary>
671668
public byte[] Data { get; set; }
669+
/// <summary>
670+
/// The response error.
671+
/// </summary>
672672
public Error Error { get; set; }
673+
/// <summary>
674+
/// The response headers.
675+
/// </summary>
673676
public Dictionary<string, string> ResponseHeaders { get; set; }
674677

675678
public IEnumerator Send(string url, Dictionary<string, string> headers)
676679
{
677-
#if ENABLE_DEBUGGING
678-
Log.Debug("DeleteRequest.Send()", "DeleteRequest, Send: {0}", url);
679-
#endif
680-
681680
URL = url;
682681
Headers = new Dictionary<string, string>();
683682
foreach (var kp in headers)
@@ -691,107 +690,41 @@ public IEnumerator Send(string url, Dictionary<string, string> headers)
691690
ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(delegate { return true; });
692691
#endif
693692

694-
#if ENABLE_DEBUGGING
695-
Log.Debug("DeleteRequest.Send()", "DeleteRequest, ProcessRequest {0}", URL);
696-
#endif
697-
UnityWebRequest deleteReq = UnityWebRequest.Delete(URL);
698-
deleteReq.method = UnityWebRequest.kHttpVerbDELETE;
699-
deleteReq.downloadHandler = new DownloadHandlerBuffer();
693+
// Create web request
694+
UnityWebRequest req = new UnityWebRequest();
695+
req.url = URL;
696+
req.method = HttpMethod;
697+
req.downloadHandler = new DownloadHandlerBuffer();
700698

701-
foreach (var kp in Headers)
702-
deleteReq.SetRequestHeader(kp.Key, kp.Value);
703-
#if UNITY_2017_2_OR_NEWER
704-
yield return deleteReq.SendWebRequest();
705-
#else
706-
yield return deleteReq.Send();
707-
#endif
708-
Error error = null;
709-
if (!string.IsNullOrEmpty(deleteReq.error))
710-
{
711-
error = new Error()
712-
{
713-
URL = url,
714-
ErrorCode = deleteReq.responseCode,
715-
ErrorMessage = deleteReq.error,
716-
Response = deleteReq.downloadHandler.text,
717-
ResponseHeaders = deleteReq.GetResponseHeaders()
718-
};
719-
}
720-
721-
Success = deleteReq.responseCode == HTTP_STATUS_OK || deleteReq.responseCode == HTTP_STATUS_OK || deleteReq.responseCode == HTTP_STATUS_NO_CONTENT || deleteReq.responseCode == HTTP_STATUS_ACCEPTED;
722-
HttpResponseCode = deleteReq.responseCode;
723-
ResponseHeaders = deleteReq.GetResponseHeaders();
724-
Data = deleteReq.downloadHandler.data;
725-
Error = error;
726-
IsComplete = true;
727-
}
728-
};
729-
730-
private class PostRequest
731-
{
732-
public string URL { get; set; }
733-
public Dictionary<string, string> Headers { get; set; }
734-
public bool IsComplete { get; set; }
735-
public bool Success { get; set; }
736-
public long HttpResponseCode { get; set; }
737-
public byte[] Data { get; set; }
738-
public Error Error { get; set; }
739-
public Dictionary<string, string> ResponseHeaders { get; set; }
740-
741-
public IEnumerator Send(string url, Dictionary<string, string> headers)
742-
{
743-
#if ENABLE_DEBUGGING
744-
Log.Debug("PostRequest.Send()", "PostRequest, Send: {0}", url);
745-
#endif
746-
747-
URL = url;
748-
Headers = new Dictionary<string, string>();
749-
foreach (var kp in headers)
750-
{
751-
if (kp.Key != "User-Agent")
752-
Headers[kp.Key] = kp.Value;
753-
}
754-
755-
#if !NETFX_CORE
756-
// This fixes the exception thrown by self-signed certificates.
757-
ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(delegate { return true; });
758-
#endif
759-
760-
#if ENABLE_DEBUGGING
761-
Log.Debug("PostRequest.Send()", "PostRequest, ProcessRequest {0}", URL);
762-
#endif
763-
UnityWebRequest postReq = UnityWebRequest.Get(URL);
764-
postReq.method = UnityWebRequest.kHttpVerbPOST;
765-
postReq.downloadHandler = new DownloadHandlerBuffer();
766699

767700
foreach (var kp in Headers)
768-
postReq.SetRequestHeader(kp.Key, kp.Value);
701+
req.SetRequestHeader(kp.Key, kp.Value);
769702
#if UNITY_2017_2_OR_NEWER
770-
yield return postReq.SendWebRequest();
703+
yield return req.SendWebRequest();
771704
#else
772-
yield return postReq.Send();
705+
yield return req.Send();
773706
#endif
774707
Error error = null;
775-
if (!string.IsNullOrEmpty(postReq.error))
708+
if (!string.IsNullOrEmpty(req.error))
776709
{
777710
error = new Error()
778711
{
779712
URL = url,
780-
ErrorCode = postReq.responseCode,
781-
ErrorMessage = postReq.error,
782-
Response = postReq.downloadHandler.text,
783-
ResponseHeaders = postReq.GetResponseHeaders()
713+
ErrorCode = req.responseCode,
714+
ErrorMessage = req.error,
715+
Response = req.downloadHandler.text,
716+
ResponseHeaders = req.GetResponseHeaders()
784717
};
785718
}
786719

787-
Success = postReq.responseCode == HTTP_STATUS_OK || postReq.responseCode == HTTP_STATUS_OK || postReq.responseCode == HTTP_STATUS_NO_CONTENT || postReq.responseCode == HTTP_STATUS_ACCEPTED;
788-
HttpResponseCode = postReq.responseCode;
789-
ResponseHeaders = postReq.GetResponseHeaders();
790-
Data = postReq.downloadHandler.data;
720+
Success = req.responseCode == HTTP_STATUS_OK || req.responseCode == HTTP_STATUS_NO_CONTENT || req.responseCode == HTTP_STATUS_ACCEPTED;
721+
HttpResponseCode = req.responseCode;
722+
ResponseHeaders = req.GetResponseHeaders();
723+
Data = req.downloadHandler.data;
791724
Error = error;
792725
IsComplete = true;
793726
}
794-
};
727+
}
795728
#endregion
796729
}
797730
}

Scripts/Services/Assistant/v2/Assistant.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
using System;
2424
using System.Collections.Generic;
2525
using System.Text;
26+
using UnityEngine.Networking;
2627

2728
namespace IBM.Watson.DeveloperCloud.Services.Assistant.v2
2829
{
@@ -144,7 +145,7 @@ public bool CreateSession(SuccessCallback<SessionResponse> successCallback, Fail
144145
req.Headers["Content-Type"] = "application/json";
145146
req.Parameters["version"] = VersionDate;
146147
req.OnResponse = OnCreateSessionResponse;
147-
req.Post = true;
148+
req.HttpMethod = UnityWebRequest.kHttpVerbPOST;
148149

149150
RESTConnector connector = RESTConnector.GetConnector(Credentials, string.Format("/v2/assistants/{0}/sessions", assistantId));
150151
if (connector == null)
@@ -246,7 +247,7 @@ public bool DeleteSession(SuccessCallback<object> successCallback, FailCallback
246247
}
247248
req.Parameters["version"] = VersionDate;
248249
req.OnResponse = OnDeleteSessionResponse;
249-
req.Delete = true;
250+
req.HttpMethod = UnityWebRequest.kHttpVerbDELETE;
250251

251252
RESTConnector connector = RESTConnector.GetConnector(Credentials, string.Format("/v2/assistants/{0}/sessions/{1}", assistantId, sessionId));
252253
if (connector == null)
@@ -367,6 +368,7 @@ public bool Message(SuccessCallback<MessageResponse> successCallback, FailCallba
367368
req.Headers["Content-Type"] = "application/json";
368369
req.Parameters["version"] = VersionDate;
369370
req.OnResponse = OnMessageResponse;
371+
req.HttpMethod = UnityWebRequest.kHttpVerbPOST;
370372

371373
RESTConnector connector = RESTConnector.GetConnector(Credentials, string.Format("/v2/assistants/{0}/sessions/{1}/message", assistantId, sessionId));
372374
if (connector == null)

0 commit comments

Comments
 (0)