internal static IEnumerator Request(MonoBehaviour caller, EngageRequest request, EngageResponse response)
{
string requestJSON = request.ToJSON();
string url = DDNA.Instance.ResolveEngageURL(requestJSON);
HttpRequest httpRequest = new HttpRequest(url);
httpRequest.HTTPMethod = HttpRequest.HTTPMethodType.POST;
httpRequest.HTTPBody = requestJSON;
httpRequest.TimeoutSeconds = DDNA.Instance.Settings.HttpRequestEngageTimeoutSeconds;
httpRequest.setHeader("Content-Type", "application/json");
System.Action<int, string, string> httpHandler = (statusCode, data, error) => {
string engagementKey = "DDSDK_ENGAGEMENT_" + request.DecisionPoint + "_" + request.Flavour;
if (error == null && statusCode >= 200 && statusCode < 300) {
try {
PlayerPrefs.SetString(engagementKey, data);
} catch (Exception exception) {
Logger.LogWarning("Unable to cache engagement: "+exception.Message);
}
} else {
Logger.LogDebug("Engagement failed with "+statusCode+" "+error);
if (PlayerPrefs.HasKey(engagementKey)) {
Logger.LogDebug("Using cached response");
data = "{\"isCachedResponse\":true," + PlayerPrefs.GetString(engagementKey).Substring(1);
} else {
data = "{}";
}
}
response(data, statusCode, error);
};
yield return caller.StartCoroutine(Network.SendRequest(httpRequest, httpHandler));
}