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)); }
internal static IEnumerator Request( MonoBehaviour caller, EngageCache cache, EngageRequest request, EngageResponse response, bool useConfigurationTimeout = false) { 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 = useConfigurationTimeout ? DDNA.Instance.Settings.HttpRequestConfigurationTimeoutSeconds : DDNA.Instance.Settings.HttpRequestEngageTimeoutSeconds; httpRequest.setHeader("Content-Type", "application/json"); Action <int, string, string> httpHandler = (statusCode, data, error) => { if (error == null && statusCode >= 200 && statusCode < 300) { cache.Put(request.DecisionPoint, request.Flavour, data); } else { Logger.LogDebug("Engagement failed with " + statusCode + " " + error); var isClientError = statusCode >= 400 && statusCode < 500; var cached = cache.Get(request.DecisionPoint, request.Flavour); if (cached != null && !isClientError) { Logger.LogDebug("Using cached response"); data = "{\"isCachedResponse\":true," + cached.Substring(1); } else { data = "{}"; } } response(data, statusCode, error); }; yield return(caller.StartCoroutine(Network.SendRequest(httpRequest, httpHandler))); }
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))); }