Ejemplo n.º 1
0
 private void ConfigManager_ResponseParsed(ConfigResponse configResponse, JObject obj)
 {
     if (configResponse.status == ConfigRequestStatus.Success)
     {
         if (obj[configKey] != null && obj[configKey + "Metadata"] != null)
         {
             _config  = (JObject)obj[configKey];
             metadata = (JObject)obj[configKey + "Metadata"];
             origin   = configResponse.requestOrigin;
         }
     }
 }
Ejemplo n.º 2
0
        private static void OnRawResponseReturned(ConfigOrigin origin, Dictionary <string, string> headers, string body)
        {
            if (body == null || headers == null)
            {
                return;
            }
            var configResponse = new ConfigResponse()
            {
                requestOrigin = origin,
                status        = ConfigRequestStatus.Pending
            };

            foreach (var validationFunc in rawResponseValidators)
            {
                if (validationFunc(headers, body) == false)
                {
                    configResponse.status = ConfigRequestStatus.Failed;
                    requestStatus         = configResponse.status;
                    FetchCompleted?.Invoke(configResponse);
                    return;
                }
            }

            RawResponseValidated?.Invoke(origin, headers, body);


            JObject responseJObj = null;

            try
            {
                responseJObj          = JObject.Parse(body);
                configResponse.status = ConfigRequestStatus.Success;
            }
            catch
            {
                configResponse.status = ConfigRequestStatus.Failed;
            }
            ResponseParsed?.Invoke(configResponse, responseJObj);

            requestStatus = configResponse.status;
            FetchCompleted?.Invoke(configResponse);
        }
Ejemplo n.º 3
0
        static void PostConfig(object userAttributes, object appAttributes)
        {
            requestStatus = ConfigRequestStatus.Pending;
            long timestamp    = new DateTimeOffset(DateTime.UtcNow).ToUnixTimeMilliseconds();
            long rtSinceStart = (long)(Time.realtimeSinceStartup * 1000000);
            var  commonJobj   = JObject.FromObject(commonPayload);

            commonJobj.Add("t_since_start", rtSinceStart);
            JObject json = new JObject();

            json.Add("common", commonJobj);
            List <JObject> items = new List <JObject>();

            items.Add(json);
            items.Add(CreatePayloadJObjectFromValuesJObject(JObject.FromObject(deliveryPayload), "analytics.delivery.v1", timestamp));
            var deviceInfoJObj = JObject.FromObject(deviceInfoPayload);

            deviceInfoJObj.Add("t_since_start", rtSinceStart);
            items.Add(CreatePayloadJObjectFromValuesJObject(deviceInfoJObj, "analytics.deviceInfo.v1", timestamp));
            if (userAttributes == null)
            {
                items.Add(CreatePayloadJObjectFromValuesJObject(new JObject(), "analytics.deliveryUserAttributes.v1", timestamp));
            }
            else
            {
                items.Add(CreatePayloadJObjectFromValuesJObject(JObject.FromObject(userAttributes), "analytics.deliveryUserAttributes.v1", timestamp));
            }
            if (appAttributes == null)
            {
                items.Add(CreatePayloadJObjectFromValuesJObject(new JObject(), "analytics.deliveryAppAttributes.v1", timestamp));
            }
            else
            {
                items.Add(CreatePayloadJObjectFromValuesJObject(JObject.FromObject(appAttributes), "analytics.deliveryAppAttributes.v1", timestamp));
            }

            foreach (var func in requestPayloadProviders)
            {
                items.Add(func.Invoke());
            }

            var sb = new StringBuilder();

            using (var textWriter = new StringWriter(sb))
            {
                ToNewlineDelimitedJson(textWriter, items);
            }

            var jsonText = sb.ToString();

            var request = new UnityWebRequest("https://config.uca.cloud.unity3d.com", UnityWebRequest.kHttpVerbPOST);

            request.SetRequestHeader("Content-Type", "application/json");
            foreach (var headerProvider in requestHeaderProviders)
            {
                var header = headerProvider.Invoke();
                request.SetRequestHeader(header.key, header.value);
            }
            request.uploadHandler   = new UploadHandlerRaw(Encoding.UTF8.GetBytes(jsonText));
            request.downloadHandler = new DownloadHandlerBuffer();
            request.SendWebRequest().completed += (AsyncOperation op) => {
                var origin         = ConfigOrigin.Remote;
                var response       = ((UnityWebRequestAsyncOperation)op).webRequest;
                var configResponse = new ConfigResponse()
                {
                    requestOrigin = origin, status = requestStatus
                };
                if (response.isHttpError || response.isNetworkError)
                {
                    configResponse.status = ConfigRequestStatus.Failed;
                    FetchCompleted?.Invoke(configResponse);
                }
                else
                {
                    RawResponseReturned?.Invoke(origin, request.GetResponseHeaders(), request.downloadHandler.text);
                }
            };
        }