Пример #1
0
        IEnumerator VerifyUpload(VimeoTicket ticket)
        {
            if (OnUploadProgress != null)
            {
                OnUploadProgress("Verifying", 0.9999999f);
            }

            byte[] data = new byte[] { 0x00 };

            using (UnityWebRequest request = UnityWebRequest.Put(ticket.upload_link_secure, data)) {
                request.chunkedTransfer = false;
                request.SetRequestHeader("Content-Range", "bytes */*");
                yield return(VimeoApi.SendRequest(request));

                if (request.responseCode == 308)
                {
                    StartCoroutine(CompleteUpload(ticket));
                }
                else
                {
                    Debug.Log(request.responseCode);
                }
            }
        }
Пример #2
0
        private void ResumeUpload()
        {
            Debug.Assert(ResumableSessionInitiated && HasPayload);

            if (uploadRequest != null)
            {
                uploadRequest.Abort();
                uploadRequest.Dispose();
            }

            if (ResumeOffset == 0)
            {
                uploadRequest = UnityWebRequest.Put(ResumableSessionUri, RequestPayload);
            }
            else
            {
                var partialPayload = new byte[RequestPayload.Length - ResumeOffset];
                Array.Copy(RequestPayload, ResumeOffset, partialPayload, 0, partialPayload.Length);
                uploadRequest = UnityWebRequest.Put(ResumableSessionUri, partialPayload);
                uploadRequest.SetRequestHeader("Content-Range", string.Format("bytes {0}-{1}/{2}", ResumeOffset, RequestPayload.Length - 1, RequestPayload.Length));
            }

            uploadRequest.SendWebRequest().completed += HandleUploadRequestCompleted;
        }
Пример #3
0
    IEnumerator PutRequest(string url)
    {
        WWWForm formWWW = new WWWForm();

        //add fields between here

        formWWW.AddField("highscore", bestscore.ToString());
        //byte[] formData = System.Text.Encoding.UTF8.GetBytes(bestscore.ToString());
        //string myString = System.Text.Encoding.UTF8.GetString(formData);

        MyClass classData = new MyClass();

        classData.highscore = bestscore;

        Debug.Log(JsonUtility.ToJson(classData));

        urlWeb = url + "/" + PublicLevel.id.ToString();
        //add fields between here!
        using (UnityWebRequest webRequest = UnityWebRequest.Put(urlWeb, JsonUtility.ToJson(classData)))
        {
            //webRequest header of request to HTTP server should be set to json
            webRequest.SetRequestHeader("Content-type", "application/json");

            yield return(webRequest.SendWebRequest());

            if (webRequest.isNetworkError)
            {
                Debug.Log(":Request error:");
            }
            else
            {
                Debug.Log(":Request Sent:");
                Debug.Log(urlWeb);
            }
        }
    }
Пример #4
0
    IEnumerator SendHttp(WordCandidate[] inputs)
    {
        string    url       = "localhost:3000/input";
        inputData data      = new inputData(inputs);
        string    inputJSON = JsonUtility.ToJson(data);

        UnityWebRequest www = UnityWebRequest.Put(url, inputJSON);

        www.SetRequestHeader("Content-Type", "application/json");
        www.method = "POST";
        yield return(www.SendWebRequest());

        if (www.isNetworkError || www.isHttpError)
        {
            Debug.Log(www.error);
        }
        else
        {
            string      response = www.downloadHandler.text;
            inputResult tmp      = JsonUtility.FromJson <inputResult>(response);
            buttonContainer.newSet(tmp.suggestions);
            master.wordCandidates.updateList(tmp.inputs);
        }
    }
Пример #5
0
        IEnumerator Put(string api_path)
        {
            if (token != null)
            {
                byte[] data = new byte[] { 0x00 };
                using (UnityWebRequest request = UnityWebRequest.Put(API_URL + api_path, data)) {
                    PrepareHeaders(request);
                    yield return(VimeoApi.SendRequest(request));

                    if (request.error != null)
                    {
                        Debug.LogError(request.downloadHandler.text);
                        if (OnError != null)
                        {
                            OnError(request.downloadHandler.text);
                        }
                    }
                    else
                    {
                        // TODO create event hook
                    }
                }
            }
        }
Пример #6
0
    IEnumerator CheckName()
    {
        result.text = " Loading ...";

        JSONObject myData = new JSONObject(JSONObject.Type.OBJECT);

        myData.AddField("name", roomDetails.name);
        myData.AddField("username", playerName.value);

        using (UnityWebRequest www = UnityWebRequest.Put(serverAddress.value + endPoint, myData.ToString()))
        {
            www.method = UnityWebRequest.kHttpVerbGET;
            www.SetRequestHeader("Content-Type", "application/json");
            www.SetRequestHeader("Accept", "application / json");

            yield return(www.SendWebRequest());

            JSONObject res = new JSONObject(www.downloadHandler.text);

            if (res["error"] && res["error"].b)
            {
                result.text = res["message"].str;
                yield break;
            }

            if (www.result != UnityWebRequest.Result.Success)
            {
                result.text = errorMessage.value;
                Debug.Log(www.error);
                yield break;
            }

            result.text = res["message"].str;
            Successful();
        }
    }
Пример #7
0
    public static IEnumerator GetAnInstance(Action <Instance> callback)
    {
        UnityWebRequest req = UnityWebRequest.Put("noneuclideangirl.net:13337/server/get", Auth);

        req.method = UnityWebRequest.kHttpVerbPOST;
        req.SetRequestHeader("Content-Type", "application/json");
        req.SetRequestHeader("Accept", "application/json");
        yield return(req.SendWebRequest());

        if (!req.isNetworkError && req.responseCode == 200)
        {
            var res = req.downloadHandler.text;
            try {
                callback(JsonUtility.FromJson <Instance>(res));
            } catch (ArgumentException e) {
                Debug.LogError(e);
                callback(null);
            }
        }
        else
        {
            Debug.Log(req.error);
        }
    }
Пример #8
0
    IEnumerator _request(string method, string url, WWWForm data, Callback callback, bool needAuthor = true)
    {
        UnityWebRequest _www;

        switch (method)
        {
        case "POST":
            _www = UnityWebRequest.Post(url, data);
            break;

        case "PUT":
            _www = UnityWebRequest.Put(url, data.data);
            _www.SetRequestHeader("Content-Type", "application/x-www-form-urlencoded");
            break;

        case "DELETE":
            _www = UnityWebRequest.Delete(url);
            break;

        case "GET":
        default:
            _www = UnityWebRequest.Get(url);
            break;
        }

        if (needAuthor)
        {
            _www.downloadHandler = new DownloadHandlerBuffer();
        }

        using (UnityWebRequest www = _www){
            yield return(www.Send());

            callback(new HttpResponse(www));
        }
    }
    IEnumerator getConfigurationFromServer()
    {
        command        = new SpeachToTextOfflineCommand();
        command.action = "getVoicesList";
        string json = JsonUtility.ToJson(command);

        print(json);
        byte[]          myData = System.Text.Encoding.UTF8.GetBytes(json);
        UnityWebRequest www    = UnityWebRequest.Put(address, myData);

        //UnityWebRequest www = UnityWebRequest.Post(address, json);
        www.SetRequestHeader("Content-Type", "application/json");
        yield return(www.Send());

        if (www.isNetworkError)
        {
            if (www.error == "Cannot connect to destination host")
            {
                MagicRoomSpeachToText_active = false;
            }
        }
        else
        {
            MagicRoomSpeachToText_active = true;
            Debug.Log(www.downloadHandler.text);
            SpeachToTextOfflineConfiguration conf = new SpeachToTextOfflineConfiguration();
            conf = JsonUtility.FromJson <SpeachToTextOfflineConfiguration>(www.downloadHandler.text);
            listofAssociatedNames = conf.voices;
            string log = "";
            foreach (VoicesOffline s in listofAssociatedNames)
            {
                log += "Available " + s.name + " as a voice, ";
            }
            Logger.addToLogNewLine("ServerTTSO", log);
        }
    }
        private UnityWebRequest BakeRequest(string endpoint, string data, string method, bool requireLoginToken, bool requiresWssToken)
        {
            //// log it
            //string sRequest = "==> BakeRequest for: " + endpoint;
            //sRequest += "\n  endpoint: " + endpoint;
            //sRequest += "\n  method: " + method;
            //sRequest += "\n  data: " + data;
            //sRequest += "\n  bRequiresLoginToken: " + requireLoginToken;
            //sRequest += "\n  bRequiresWssToken: " + requiresWssToken;
            //if (requireLoginToken) sRequest += "\n  loginToken: " + API.loginToken;
            //if (requiresWssToken) sRequest += "\n  wssToken: " + API.wssToken;
            //Debug.Log(sRequest);

            UnityWebRequest www;

            if (method == "GET")
            {
                www = UnityWebRequest.Get(endpoint);
            }
            else
            {
                www        = UnityWebRequest.Put(endpoint, data);
                www.method = method;
            }
            www.SetRequestHeader("Content-Type", "application/json");
            if (requireLoginToken)
            {
                www.SetRequestHeader("Authorization", "Bearer " + API.loginToken);
            }
            if (requiresWssToken)
            {
                www.SetRequestHeader("Authorization", "Bearer " + API.wssToken);
            }

            return(www);
        }
Пример #11
0
    IEnumerator Answer(string info, System.Action <string> callback = null)
    {
        byte[] bodyRaw = Encoding.UTF8.GetBytes(info);
        using (UnityWebRequest request = UnityWebRequest.Put("https://webhooks.mongodb-realm.com/api/client/v2.0/app/covidwarrior-xhivn/service/CovidWarriorInfo/incoming_webhook/answered", bodyRaw))
        {
            yield return(request.SendWebRequest());

            if (request.isNetworkError || request.isHttpError)
            {
                Debug.Log(request.error);
                if (callback != null)
                {
                    callback.Invoke("false");
                }
            }
            else
            {
                if (callback != null)
                {
                    callback.Invoke(request.downloadHandler.text);
                }
            }
        }
    }
Пример #12
0
        private IEnumerator createRoom()
        {
            int   net_count    = 0;
            float timeInterval = 1.0f;

            isNetSuccee = false;
            while (true)
            {
                createRoomJsonCls op_data;
                op_data = new createRoomJsonCls(playerData.Instance.user_id);
                string sendDataJson = UnityEngine.JsonUtility.ToJson(op_data);

                UnityWebRequest request = UnityWebRequest.Put(Constants.ServerAdress, sendDataJson);
                request.method = UnityWebRequest.kHttpVerbPOST;

                yield return(request.SendWebRequest());

                if (request.responseCode == 200)
                {
                    string text = request.downloadHandler.text;
                    Constants.Room_id = playerData.Instance.user_id;
                    isNetSuccee       = true;
                    break;
                }
                net_count++;
                if (net_count > 3)
                {
                    Debug.Log("YOU OUT");
                    Application.Quit();
                }
                Debug.Log(timeInterval);
                yield return(new WaitForSeconds(timeInterval));

                timeInterval *= 2;
            }
        }
Пример #13
0
        public override IEnumerator RunJob()
        {
            Debug.Log("*************************** CoroutineJobLoadMap ***************************");

            BaseMapper    mapper = host as BaseMapper;
            SDKMapRequest r      = new SDKMapRequest();

            r.token = mapper.token;
            r.id    = this.id;

            string jsonString2 = JsonUtility.ToJson(r);

            using (UnityWebRequest request = UnityWebRequest.Put(string.Format(Endpoint.URL_FORMAT, mapper.server, Endpoint.LOAD_MAP), jsonString2))
            {
                request.method          = UnityWebRequest.kHttpVerbPOST;
                request.useHttpContinue = false;
                request.SetRequestHeader("Content-Type", "application/json");
                request.SetRequestHeader("Accept", "application/json");
                yield return(request.SendWebRequest());

                //Debug.Log("Response code: " + request.responseCode);

                if (request.isNetworkError || request.isHttpError)
                {
                    Debug.LogError(request.error);
                }
                else if (request.responseCode == (long)HttpStatusCode.OK)
                {
                    SDKMapResult result = JsonUtility.FromJson <SDKMapResult>(request.downloadHandler.text);
                    if (result.error == "none")
                    {
                        byte[] mapData = Convert.FromBase64String(result.b64);
                        Debug.Log("Load map " + this.id + " (" + mapData.Length + " bytes) (" + MD5(mapData) + "/" + result.md5_al + ")");

                        uint      countMax     = 16 * 1024;
                        Vector3[] vector3Array = new Vector3[countMax];

                        Task <int> t0 = Task.Run(() =>
                        {
                            return(Immersal.Core.LoadMap(mapData));
                        });

                        while (!t0.IsCompleted)
                        {
                            yield return(null);
                        }

                        int mapId = t0.Result;

                        Debug.Log("mapId " + mapId);

                        Task <int> t1 = Task.Run(() =>
                        {
                            return(Immersal.Core.GetPointCloud(mapId, vector3Array));
                        });

                        while (!t1.IsCompleted)
                        {
                            yield return(null);
                        }

                        int num = t1.Result;

                        Debug.Log("map points: " + num);

                        PointCloudRenderer renderer = go.AddComponent <PointCloudRenderer>();
                        renderer.CreateCloud(vector3Array, num);
                        renderer.mapId = mapId;
                        if (!mapper.pcr.ContainsKey(id))
                        {
                            mapper.pcr.Add(id, renderer);
                        }

                        mapper.stats.locFail = 0;
                        mapper.stats.locSucc = 0;

                        VisualizeManager.loadJobs.Remove(mapId);
                    }
                }
            }
        }
Пример #14
0
        public override IEnumerator RunJob()
        {
            Debug.Log("*************************** CoroutineJobLocalize On-Server ***************************");

            BaseMapper mapper = host as BaseMapper;

            byte[] capture = new byte[channels * width * height + 1024];
            Task <(string, icvCaptureInfo)> t = Task.Run(() =>
            {
                icvCaptureInfo info = Immersal.Core.CaptureImage(capture, capture.Length, pixels, width, height, channels);
                return(Convert.ToBase64String(capture, 0, info.captureSize), info);
            });

            while (!t.IsCompleted)
            {
                yield return(null);
            }

            string         encodedImage = t.Result.Item1;
            icvCaptureInfo captureInfo  = t.Result.Item2;

            SDKLocalizeRequest imageRequest = this.useGPS ? new SDKGeoLocalizeRequest() : new SDKLocalizeRequest();

            imageRequest.token = mapper.token;
            imageRequest.fx    = intrinsics.x;
            imageRequest.fy    = intrinsics.y;
            imageRequest.ox    = intrinsics.z;
            imageRequest.oy    = intrinsics.w;
            imageRequest.b64   = encodedImage;

            if (this.useGPS)
            {
                SDKGeoLocalizeRequest gr = imageRequest as SDKGeoLocalizeRequest;
                gr.latitude  = this.latitude;
                gr.longitude = this.longitude;
                gr.radius    = this.radius;
            }
            else
            {
                int n = mapper.pcr.Count;

                imageRequest.mapIds = new SDKMapId[n];

                int count = 0;
                foreach (int id in mapper.pcr.Keys)
                {
                    imageRequest.mapIds[count]      = new SDKMapId();
                    imageRequest.mapIds[count++].id = id;
                }
            }

            string jsonString = JsonUtility.ToJson(imageRequest);
            string endpoint   = this.useGPS ? Endpoint.SERVER_GEOLOCALIZE : Endpoint.SERVER_LOCALIZE;

            SDKLocalizeResult locResult = new SDKLocalizeResult();

            locResult.success = false;
            Matrix4x4 m          = new Matrix4x4();
            Matrix4x4 cloudSpace = new Matrix4x4();

            using (UnityWebRequest request = UnityWebRequest.Put(string.Format(Endpoint.URL_FORMAT, mapper.server, endpoint), jsonString))
            {
                request.method          = UnityWebRequest.kHttpVerbPOST;
                request.useHttpContinue = false;
                request.SetRequestHeader("Content-Type", "application/json");
                request.SetRequestHeader("Accept", "application/json");
                yield return(request.SendWebRequest());

                if (request.isNetworkError || request.isHttpError)
                {
                    Debug.LogError(request.error);
                }
                else if (request.responseCode == (long)HttpStatusCode.OK)
                {
                    locResult = JsonUtility.FromJson <SDKLocalizeResult>(request.downloadHandler.text);

                    if (locResult.success)
                    {
                        cloudSpace     = Matrix4x4.identity;
                        cloudSpace.m00 = locResult.r00; cloudSpace.m01 = locResult.r01; cloudSpace.m02 = locResult.r02; cloudSpace.m03 = locResult.px;
                        cloudSpace.m10 = locResult.r10; cloudSpace.m11 = locResult.r11; cloudSpace.m12 = locResult.r12; cloudSpace.m13 = locResult.py;
                        cloudSpace.m20 = locResult.r20; cloudSpace.m21 = locResult.r21; cloudSpace.m22 = locResult.r22; cloudSpace.m23 = locResult.pz;
                        Matrix4x4 trackerSpace = Matrix4x4.TRS(position, rotation, Vector3.one);
                        mapper.stats.locSucc++;

                        Debug.Log("*************************** On-Server Localization Succeeded ***************************");
                        Debug.Log("fc 4x4\n" + cloudSpace + "\n" +
                                  "ft 4x4\n" + trackerSpace);

                        m = trackerSpace * (cloudSpace.inverse);

                        foreach (KeyValuePair <int, PointCloudRenderer> p in mapper.pcr)
                        {
                            if (p.Key == locResult.map)
                            {
                                p.Value.go.transform.position = m.GetColumn(3);
                                p.Value.go.transform.rotation = m.rotation;
                                break;
                            }
                        }

                        Debug.Log(locResult.error);
                    }
                    else
                    {
                        mapper.stats.locFail++;
                        Debug.Log("*************************** On-Server Localization Failed ***************************");
                    }
                }
            }

            if (locResult.success)
            {
                SDKEcefRequest ecefRequest = new SDKEcefRequest();
                ecefRequest.token = mapper.token;
                ecefRequest.id    = locResult.map;

                using (UnityWebRequest request = UnityWebRequest.Put(string.Format(Endpoint.URL_FORMAT, mapper.server, Endpoint.SERVER_ECEF), JsonUtility.ToJson(ecefRequest)))
                {
                    request.method          = UnityWebRequest.kHttpVerbPOST;
                    request.useHttpContinue = false;
                    request.SetRequestHeader("Content-Type", "application/json");
                    request.SetRequestHeader("Accept", "application/json");
                    yield return(request.SendWebRequest());

                    if (request.isNetworkError || request.isHttpError)
                    {
                        Debug.LogError(request.error);
                    }
                    else if (request.responseCode == (long)HttpStatusCode.OK)
                    {
                        SDKEcefResult result = JsonUtility.FromJson <SDKEcefResult>(request.downloadHandler.text);

                        Debug.Log(request.downloadHandler.text);

                        double[]   wgs84 = new double[3];
                        Vector3    pos   = cloudSpace.GetColumn(3);
                        Quaternion rot   = cloudSpace.rotation;
                        int        r     = Immersal.Core.PosMapToWgs84(wgs84, pos, result.ecef);
                        mapper.vlatitude  = wgs84[0];
                        mapper.vlongitude = wgs84[1];
                        mapper.valtitude  = wgs84[2];

                        if (r == 0)
                        {
                            mapper.lastLocalizedPose = (true, result.ecef, m.inverse, new Pose(pos, rot));
                        }
                    }
                }
            }
        }
Пример #15
0
        public override IEnumerator RunJob()
        {
            Debug.Log("*************************** CoroutineJobCapture ***************************");
            BaseMapper mapper = host as BaseMapper;

            byte[] capture = new byte[channels * width * height + 1024];

            Task <(string, icvCaptureInfo)> t = Task.Run(() =>
            {
                icvCaptureInfo info = Core.CaptureImage(capture, capture.Length, pixels, width, height, channels);
                return(Convert.ToBase64String(capture, 0, info.captureSize), info);
            });

            while (!t.IsCompleted)
            {
                yield return(null);
            }

            string         encodedImage = t.Result.Item1;
            icvCaptureInfo captureInfo  = t.Result.Item2;

            mapper.NotifyIfConnected(captureInfo);

            SDKImageRequest imageRequest = new SDKImageRequest();

            imageRequest.token     = mapper.token;
            imageRequest.run       = this.run;
            imageRequest.bank      = mapper.currentBank;
            imageRequest.index     = this.index;
            imageRequest.anchor    = this.anchor;
            imageRequest.px        = position.x;
            imageRequest.py        = position.y;
            imageRequest.pz        = position.z;
            imageRequest.r00       = rotation.m00;
            imageRequest.r01       = rotation.m01;
            imageRequest.r02       = rotation.m02;
            imageRequest.r10       = rotation.m10;
            imageRequest.r11       = rotation.m11;
            imageRequest.r12       = rotation.m12;
            imageRequest.r20       = rotation.m20;
            imageRequest.r21       = rotation.m21;
            imageRequest.r22       = rotation.m22;
            imageRequest.fx        = intrinsics.x;
            imageRequest.fy        = intrinsics.y;
            imageRequest.ox        = intrinsics.z;
            imageRequest.oy        = intrinsics.w;
            imageRequest.latitude  = latitude;
            imageRequest.longitude = longitude;
            imageRequest.altitude  = altitude;
            imageRequest.b64       = encodedImage;

            string jsonString = JsonUtility.ToJson(imageRequest);

            using (UnityWebRequest request = UnityWebRequest.Put(string.Format(Endpoint.URL_FORMAT, mapper.server, Endpoint.CAPTURE_IMAGE), jsonString))
            {
                request.method          = UnityWebRequest.kHttpVerbPOST;
                request.useHttpContinue = false;
                request.SetRequestHeader("Content-Type", "application/json");
                request.SetRequestHeader("Accept", "application/json");
                yield return(request.SendWebRequest());

                Debug.Log("Response code: " + request.responseCode);

                if (request.isNetworkError || request.isHttpError)
                {
                    Debug.LogError(request.error);
                }
                else if (request.responseCode == (long)HttpStatusCode.OK)
                {
                    SDKImageResult result = JsonUtility.FromJson <SDKImageResult>(request.downloadHandler.text);
                    if (result.error == "none")
                    {
                        Debug.Log("Image uploaded successfully");
                    }
                }
            }
        }
Пример #16
0
        private IEnumerator ProcessRequestQueue()
        {
            // yield AFTER we increment the connection count, so the Send() function can return immediately
            _activeConnections += 1;
#if UNITY_EDITOR
            if (!UnityEditorInternal.InternalEditorUtility.inBatchMode)
            {
                yield return(null);
            }
#else
            yield return(null);
#endif

            while (_requests.Count > 0)
            {
                Request req = _requests.Dequeue();
                if (req.Cancel)
                {
                    continue;
                }
                string url = URL;
                if (!string.IsNullOrEmpty(req.Function))
                {
                    url += req.Function;
                }

                StringBuilder args = null;
                foreach (var kp in req.Parameters)
                {
                    var key   = kp.Key;
                    var value = kp.Value;

                    if (value is string)
                    {
                        value = UnityWebRequest.EscapeURL((string)value);
                    }
                    else if (value is byte[])
                    {
                        value = Convert.ToBase64String((byte[])value);
                    }
                    else if (value is Int32 || value is Int64 || value is UInt32 || value is UInt64 || value is float)
                    {
                        value = value.ToString();
                    }
                    else if (value is bool)
                    {
                        value = value.ToString().ToLower();
                    }
                    else if (value is DateTime?)
                    {
                        value = String.Format("{0:yyyy-MM-ddThh:mm:ssZ}", value);//yyyy-MM-ddthh:mm:ssz
                    }
                    else if (value != null)
                    {
                        Log.Warning("RESTConnector.ProcessRequestQueue()", "Unsupported parameter value type {0}", value.GetType().Name);
                    }
                    else
                    {
                        Log.Error("RESTConnector.ProcessRequestQueue()", "Parameter {0} value is null", key);
                    }

                    if (args == null)
                    {
                        args = new StringBuilder();
                    }
                    else
                    {
                        args.Append("&");
                    }

                    args.Append(key + "=" + value);
                }

                if (args != null && args.Length > 0)
                {
                    url += "?" + args.ToString();
                }

                AddHeaders(req.Headers);

                Response resp = new Response();

                DateTime        startTime       = DateTime.Now;
                UnityWebRequest unityWebRequest = null;
                if (req.Forms != null || req.Send != null)
                {
                    //  POST and PUT with data
                    if (req.Forms != null)
                    {
                        if (req.Send != null)
                        {
                            Log.Warning("RESTConnector", "Do not use both Send & Form fields in a Request object.");
                        }

                        WWWForm form       = new WWWForm();
                        JObject bodyObject = new JObject();
                        try
                        {
                            foreach (var formData in req.Forms)
                            {
                                if (formData.Value.IsBinary)
                                {
                                    form.AddBinaryData(formData.Key, formData.Value.Contents, formData.Value.FileName, formData.Value.MimeType);
                                    bodyObject[formData.Key] = formData.Value.Contents;
                                }
                                else if (formData.Value.BoxedObject is string)
                                {
                                    form.AddField(formData.Key, (string)formData.Value.BoxedObject);
                                    bodyObject[formData.Key] = (string)formData.Value.BoxedObject;
                                }
                                else if (formData.Value.BoxedObject is int)
                                {
                                    form.AddField(formData.Key, (int)formData.Value.BoxedObject);
                                    bodyObject[formData.Key] = (int)formData.Value.BoxedObject;
                                }
                                else if (formData.Value.BoxedObject != null)
                                {
                                    Log.Warning("RESTConnector.ProcessRequestQueue()", "Unsupported form field type {0}", formData.Value.BoxedObject.GetType().ToString());
                                }
                            }
                        }
                        catch (Exception e)
                        {
                            Log.Error("RESTConnector.ProcessRequestQueue()", "Exception when initializing WWWForm: {0}", e.ToString());
                        }
                        if (req.HttpMethod == UnityWebRequest.kHttpVerbPUT)
                        {
                            unityWebRequest        = UnityWebRequest.Post(url, form);
                            unityWebRequest.method = "PUT";
                        }
                        else
                        {
                            var httpContent = bodyObject.ToString();
                            unityWebRequest        = UnityWebRequest.Put(url, httpContent);
                            unityWebRequest.method = "POST";
                        }
                    }
                    else if (req.Send != null)
                    {
                        unityWebRequest = new UnityWebRequest(url, req.HttpMethod)
                        {
                            uploadHandler = (UploadHandler) new UploadHandlerRaw(req.Send)
                        };

                        unityWebRequest.SetRequestHeader("Content-Type", "application/json");
                    }
                }
                else
                {
                    //  GET, DELETE and POST without data
                    unityWebRequest = new UnityWebRequest
                    {
                        url    = url,
                        method = req.HttpMethod
                    };

                    if (req.HttpMethod == UnityWebRequest.kHttpVerbPOST)
                    {
                        unityWebRequest.SetRequestHeader("Content-Type", "application/json");
                    }
                }

                foreach (KeyValuePair <string, string> kvp in req.Headers)
                {
                    unityWebRequest.SetRequestHeader(kvp.Key, kvp.Value);
                }

                unityWebRequest.downloadHandler = new DownloadHandlerBuffer();

                if (req.DisableSslVerification == true)
                {
                    unityWebRequest.certificateHandler = new AcceptAllCertificates();
                }
                else
                {
                    unityWebRequest.certificateHandler = null;
                }

#if UNITY_2017_2_OR_NEWER
                unityWebRequest.SendWebRequest();
#else
                www.Send();
#endif
#if ENABLE_DEBUGGING
                Log.Debug("RESTConnector", "URL: {0}", url);
#endif

                // wait for the request to complete.
                float timeout = Mathf.Max(Constants.Config.Timeout, req.Timeout);
                while (!unityWebRequest.isDone)
                {
                    if (req.Cancel)
                    {
                        break;
                    }
                    if ((DateTime.Now - startTime).TotalSeconds > timeout)
                    {
                        break;
                    }
                    if (req.OnUploadProgress != null)
                    {
                        req.OnUploadProgress(unityWebRequest.uploadProgress);
                    }
                    if (req.OnDownloadProgress != null)
                    {
                        req.OnDownloadProgress(unityWebRequest.downloadProgress);
                    }

#if UNITY_EDITOR
                    if (!UnityEditorInternal.InternalEditorUtility.inBatchMode)
                    {
                        yield return(null);
                    }
#else
                    yield return(null);
#endif
                }

                if (req.Cancel)
                {
                    continue;
                }

                bool     bError = false;
                IBMError error  = null;
                if (!string.IsNullOrEmpty(unityWebRequest.error))
                {
                    switch (unityWebRequest.responseCode)
                    {
                    case HTTP_STATUS_OK:
                    case HTTP_STATUS_CREATED:
                    case HTTP_STATUS_ACCEPTED:
                        bError = false;
                        break;

                    default:
                        bError = true;
                        break;
                    }

                    string errorMessage = GetErrorMessage(unityWebRequest.downloadHandler.text);

                    if (errorMessage.Equals(""))
                    {
                        errorMessage = unityWebRequest.error;
                    }

                    error = new IBMError()
                    {
                        Url             = url,
                        StatusCode      = unityWebRequest.responseCode,
                        ErrorMessage    = errorMessage,
                        Response        = unityWebRequest.downloadHandler.text,
                        ResponseHeaders = unityWebRequest.GetResponseHeaders()
                    };
                    if (bError)
                    {
                        Log.Error("RESTConnector.ProcessRequestQueue()", "URL: {0}, ErrorCode: {1}, Error: {2}, Response: {3}", url, unityWebRequest.responseCode, unityWebRequest.error,
                                  string.IsNullOrEmpty(unityWebRequest.downloadHandler.text) ? "" : unityWebRequest.downloadHandler.text);
                    }
                    else
                    {
                        Log.Warning("RESTConnector.ProcessRequestQueue()", "URL: {0}, ErrorCode: {1}, Error: {2}, Response: {3}", url, unityWebRequest.responseCode, unityWebRequest.error,
                                    string.IsNullOrEmpty(unityWebRequest.downloadHandler.text) ? "" : unityWebRequest.downloadHandler.text);
                    }
                }
                if (!unityWebRequest.isDone)
                {
                    Log.Error("RESTConnector.ProcessRequestQueue()", "Request timed out for URL: {0}", url);
                    bError = true;
                }

                // generate the Response object now..
                if (!bError)
                {
                    resp.Success          = true;
                    resp.Data             = unityWebRequest.downloadHandler.data;
                    resp.HttpResponseCode = unityWebRequest.responseCode;
                }
                else
                {
                    resp.Success = false;
                    resp.Error   = error;
                }

                resp.Headers = unityWebRequest.GetResponseHeaders() ?? new Dictionary <string, string>();

                resp.ElapsedTime = (float)(DateTime.Now - startTime).TotalSeconds;

                // if the response is over a threshold, then log with status instead of debug
                if (resp.ElapsedTime > LogResponseTime)
                {
                    Log.Warning("RESTConnector.ProcessRequestQueue()", "Request {0} completed in {1} seconds.", url, resp.ElapsedTime);
                }

                if (req.OnResponse != null)
                {
                    req.OnResponse(req, resp);
                }

                unityWebRequest.Dispose();
            }

            // reduce the connection count before we exit.
            _activeConnections -= 1;
            yield break;
        }
Пример #17
0
        UnityWebRequest CreateWebRequest(string url, LootLockerServerRequest request)
        {
            UnityWebRequest webRequest;

            switch (request.httpMethod)
            {
            case LootLockerHTTPMethod.UPLOAD:
                webRequest = UnityWebRequest.Post(url, request.form);
                break;

            case LootLockerHTTPMethod.POST:
            case LootLockerHTTPMethod.PATCH:
            // Defaults are fine for PUT
            case LootLockerHTTPMethod.PUT:

                if (request.payload == null && request.upload != null)
                {
                    List <IMultipartFormSection> form = new List <IMultipartFormSection>
                    {
                        new MultipartFormFileSection(request.uploadName, request.upload, System.DateTime.Now.ToString(), request.uploadType)
                    };

                    // generate a boundary then convert the form to byte[]
                    byte[] boundary     = UnityWebRequest.GenerateBoundary();
                    byte[] formSections = UnityWebRequest.SerializeFormSections(form, boundary);
                    // Set the content type - NO QUOTES around the boundary
                    string contentType = String.Concat("multipart/form-data; boundary=--", Encoding.UTF8.GetString(boundary));

                    //Debug.LogError("Content type Set: " + contentType);
                    // Make my request object and add the raw body. Set anything else you need here
                    webRequest = new UnityWebRequest();
                    webRequest.SetRequestHeader("Content-Type", "multipart/form-data; boundary=--");
                    webRequest.uri = new Uri(url);
                    Debug.Log(url);    //the url is wrong in some cases
                    webRequest.uploadHandler             = new UploadHandlerRaw(formSections);
                    webRequest.uploadHandler.contentType = contentType;
                    webRequest.useHttpContinue           = false;

                    // webRequest.method = "POST";
                    webRequest.method = UnityWebRequest.kHttpVerbPOST;
                }
                else
                {
                    string json = (request.payload != null && request.payload.Count > 0) ? JsonConvert.SerializeObject(request.payload) : request.jsonPayload;
#if UNITY_EDITOR
                    LootLockerSDKManager.DebugMessage("REQUEST BODY = " + json);
#endif
                    byte[] bytes = System.Text.Encoding.UTF8.GetBytes(string.IsNullOrEmpty(json) ? "{}" : json);
                    webRequest        = UnityWebRequest.Put(url, bytes);
                    webRequest.method = request.httpMethod.ToString();
                }

                break;

            case LootLockerHTTPMethod.OPTIONS:
            case LootLockerHTTPMethod.HEAD:
            case LootLockerHTTPMethod.GET:
                // Defaults are fine for GET
                webRequest        = UnityWebRequest.Get(url);
                webRequest.method = request.httpMethod.ToString();
                break;

            case LootLockerHTTPMethod.DELETE:
                // Defaults are fine for DELETE
                webRequest = UnityWebRequest.Delete(url);
                break;

            default:
                throw new System.Exception("Invalid HTTP Method");
            }

            if (baseHeaders != null)
            {
                foreach (KeyValuePair <string, string> pair in baseHeaders)
                {
                    if (pair.Key == "Content-Type" && request.upload != null)
                    {
                        continue;
                    }

                    webRequest.SetRequestHeader(pair.Key, pair.Value);
                }
            }

            if (request.extraHeaders != null)
            {
                foreach (KeyValuePair <string, string> pair in request.extraHeaders)
                {
                    webRequest.SetRequestHeader(pair.Key, pair.Value);
                }
            }

            return(webRequest);
        }
Пример #18
0
        IEnumerator ConnectionCo()
        {
            if (Application.internetReachability == NetworkReachability.NotReachable)
            {
                if (OnFail != null)
                {
                    Response tempResponse = new Response();
                    tempResponse._textData = "check the connectivity";
                    tempResponse._errorData = "ERROR : NO ACTIVE CONNECTION";
                    OnFail(this, tempResponse);
                }
                yield break;
            }

            bool isUrlExist = false;
            string inUrl = _url;
            if (shouldUseCache)
            {
                isUrlExist = WebCacheManager.Instance.LoadUrl(out _url, inUrl);
            }

            if (_requestType == RequestType.GET)
            {
                if (_responseType == ResponseType.IMAGE)
                {
                    _www = UnityWebRequestTexture.GetTexture(_url);
                }
                else
                {
                    _www = UnityWebRequest.Get(_url);
                }
              
                _www.chunkedTransfer = false;
            }
            else
            {
                if (_postData != null)
                {
                    _www = _www == null ? UnityWebRequest.Put(_url, Encoding.ASCII.GetBytes(_postData)) : _www;
                }
                else
                {
                    Debug.Log("Posting Web Request : "+_url);
                    _www = _www == null ? UnityWebRequest.Post(_url, _webForm) : _www;
                }
                _www.chunkedTransfer = false;

              
               
            }
            yield return _www.SendWebRequest();
            if (debug)
            {
               // GLog.Log("Web data :" + _www.text);
               // GLog.Log("Web Error :" + _www.error);
            }
            if (_www.error == null)
            {
                if (OnSuccess != null)
                {
                    switch (_responseType)
                    {
                        case ResponseType.TEXT:
                            Response tempResponse = new Response();
                            Debug.LogError("response: "+ _www.downloadHandler.text);
                            tempResponse._textData = _www.downloadHandler.text;
                            if (shouldUseCache)
                            {
                                if (!isUrlExist)
                                {
                                  //  WebCacheManager.Instance.AddInCache(tempResponse, ResponseType.TEXT, _url);

                                }
                            }
                            OnSuccess(this, tempResponse);
                            break;
                        case ResponseType.IMAGE:
                            tempResponse = new Response();
                            if (_refImage == null)
                            {
#if _D_I
                                //Debug.Log("The Reference Image is null............");
#endif
                                tempResponse._image = new Texture2D(1, 1, TextureFormat.RGB24, false);
                            }

                            else
                            {
#if _D_I
                               // Debug.Log("The Reference Image is not null............");
#endif
                                tempResponse._image = _refImage;
                            }
                           
                                if (_www != null)
                                {
                                tempResponse._image = ((DownloadHandlerTexture)_www.downloadHandler).texture;
                                }
                            

                                /*  if (_www != null)
                                      _www.LoadImageIntoTexture(tempResponse._image);*/
                                if (shouldUseCache)
                            {
                                if (!isUrlExist)
                                {
                                   // WebCacheManager.Instance.AddInCache(tempResponse, ResponseType.IMAGE, _url);
                                }
                            }
                            OnSuccess(this, tempResponse);
                            break;

                    }
                }
            }
            else
            {
                if (OnFail != null)
                {
                    Response tempResponse = new Response();
                    tempResponse._textData = _www.downloadHandler.text.ToString();
                    tempResponse._errorData = _www.error;
                    OnFail(this, tempResponse);
                }
            }

            if (_autoDestroy)
            {
                Close();
            }
            //yield return null;
        }
Пример #19
0
        private static IEnumerator SimpleCallCoroutine(string method, string fullUrl, byte[] payload, Action <byte[]> successCallback, Action <string> errorCallback)
        {
            if (payload == null)
            {
                using (UnityWebRequest www = UnityWebRequest.Get(fullUrl))
                {
#if UNITY_2017_2_OR_NEWER
                    yield return(www.SendWebRequest());
#else
                    yield return(www.Send());
#endif

                    if (!string.IsNullOrEmpty(www.error))
                    {
                        errorCallback(www.error);
                    }
                    else
                    {
                        successCallback(www.downloadHandler.data);
                    }
                };
            }
            else
            {
                UnityWebRequest request;
                if (method == "put")
                {
                    request = UnityWebRequest.Put(fullUrl, payload);
                }
                else
                {
                    request = new UnityWebRequest(fullUrl, "POST");
                    request.uploadHandler   = (UploadHandler) new UploadHandlerRaw(payload);
                    request.downloadHandler = (DownloadHandler) new DownloadHandlerBuffer();
                    request.SetRequestHeader("Content-Type", "application/json");

                    //var strPayload = System.Text.Encoding.UTF8.GetString(payload);
                    //Debug.Log(strPayload);
                }


#if UNITY_2017_2_OR_NEWER
                request.chunkedTransfer = false; // can be removed after Unity's PUT will be more stable
                request.SendWebRequest();
#else
                request.Send();
#endif

#if !UNITY_WEBGL
                while (request.uploadProgress < 1 && request.downloadProgress < 1)
                {
                    yield return(1);
                }
#else
                while (!request.isDone)
                {
                    yield return(1);
                }
#endif

                while (!request.isDone)
                {
                    yield return(1);
                }

                if (!string.IsNullOrEmpty(request.error))
                {
                    errorCallback(request.error);
                }
                else
                {
                    successCallback(request.downloadHandler.data);
                }
            }
        }
Пример #20
0
    public IEnumerator WebRequest(HttpReqType type, string url, byte[] data = null, Action <string> successCallback = null, Action failCallback = null)
    {
        UnityWebRequest www = null;

        switch (type)
        {
        case HttpReqType.GET:
            www = UnityWebRequest.Get(Https + url);
            break;

        case HttpReqType.PUT:
            www = UnityWebRequest.Put(Https + url, data);
            break;

        case HttpReqType.POST:
            if (data != null)
            {
                www = UnityWebRequest.Put(Https + url, data);
            }
            else
            {
                JsonData json = new JsonData();
                json["AppName"] = "MusicGame";
                byte[] Data = System.Text.Encoding.UTF8.GetBytes(json.ToJson());
                www = UnityWebRequest.Put(Https + url, Data);
            }
            www.method = UnityWebRequest.kHttpVerbPOST;
            break;
        }

        www.SetRequestHeader("Content-Type", "application/json;charset=utf-8");
        www.SetRequestHeader("Token", Token);
        yield return(www.Send());

        bool exceptionOccur = false;

        try
        {
            if (!string.IsNullOrEmpty(www.error))
            {
                LogManager.Log(www.error);
            }
            else
            {
                if (successCallback != null)
                {
                    successCallback.Invoke(www.downloadHandler.text);
                }
            }
        }
        catch (Exception e)
        {
            LogManager.LogError(e.StackTrace);
            LogManager.LogError(e.Message + "\n webRequest faild: " + url);
            exceptionOccur = true;
        }
        finally
        {
            if (failCallback != null && exceptionOccur)
            {
                failCallback.Invoke();
            }
        }
    }
Пример #21
0
        /// <summary>
        /// Makes the HTTP request (Sync).
        /// </summary>
        /// <param name="path">URL path.</param>
        /// <param name="method">HTTP method.</param>
        /// <param name="queryParams">Query parameters.</param>
        /// <param name="postBody">HTTP body (POST request).</param>
        /// <param name="headerParams">Header parameters.</param>
        /// <param name="formParams">Form parameters.</param>
        /// <param name="fileParams">File parameters.</param>
        /// <param name="authSettings">Authentication settings.</param>
        /// <returns>IAsyncOperation<UnityWebRequest></returns>
        public IAsyncOperation <UnityWebRequest> CallApi(String path, string method, Dictionary <String, String> queryParams, String postBody,
                                                         Dictionary <String, String> headerParams, Dictionary <String, String> formParams,
                                                         Dictionary <String, String> fileParams, String[] authSettings)
        {
            UnityWebRequest request = null;
            var             result  = new AsyncCompletionSource <UnityWebRequest>();

            switch (method)
            {
            case UnityWebRequest.kHttpVerbGET:
                request = UnityWebRequest.Get(BasePath + path);
                break;

            case UnityWebRequest.kHttpVerbPOST:
                request = UnityWebRequest.Post(BasePath + path, formParams);
                break;

            case UnityWebRequest.kHttpVerbPUT:
                request = UnityWebRequest.Put(BasePath + path, postBody);
                break;

            case UnityWebRequest.kHttpVerbDELETE:
                request = UnityWebRequest.Delete(BasePath + path);
                break;

            default:
                throw new ApiException(500, "Method not available: " + method);
            }

            UpdateParamsForAuth(queryParams, headerParams, authSettings, true)
            .Then(() =>
            {
                // add default header, if any
                foreach (var defaultHeader in _defaultHeaderMap)
                {
                    request.SetRequestHeader(defaultHeader.Key, defaultHeader.Value);
                }

                // add header parameter, if any
                foreach (var param in headerParams)
                {
                    request.SetRequestHeader(param.Key, param.Value);
                }

                if (queryParams.Count > 0 || formParams.Count > 0 && method != UnityWebRequest.kHttpVerbPOST)
                {
                    request.url += "?";
                }

                // add query parameter, if any
                if (queryParams.Count > 0)
                {
                    request.url += String.Join("&", queryParams.Select(kv => kv.Key + "=" + kv.Value).ToArray());
                }

                foreach (var param in fileParams)
                {
                    throw new ApiException(500, "Uploading files is not implemented.");
                }

                // add form parameter, if any
                if (formParams.Count > 0 && method != UnityWebRequest.kHttpVerbPOST)
                {
                    request.url += String.Join("&", formParams.Select(kv => kv.Key + "=" + kv.Value).ToArray());
                }

                // add file parameter, if any
                foreach (var param in fileParams)
                {
                    throw new ApiException(500, "Uploading files is not implemented.");
                }

                if (postBody != null)
                {
                    // http body (model) parameter
                    var bodyBytes = System.Text.Encoding.UTF8.GetBytes(postBody);
                    request.SetRequestHeader("Content-Type", "application/json");
                    request.uploadHandler   = new UploadHandlerRaw(bodyBytes);
                    request.downloadHandler = new DownloadHandlerBuffer();
                }

                result.AddProgressCallback((p) =>
                {
                    UnityEngine.Debug.Log("ApiClientProgress: " + p);
                    if (!result.IsCompleted && !result.IsCanceled)
                    {
                        result.SetProgress(p);
                    }
                });

                Observable.FromCoroutine(() => DoRequest(result, request)).Subscribe();
            })
            .Catch(error =>
            {
                result.SetException(error);
            });

            return(result);
        }
Пример #22
0
        static bool PutRequestInit <O, I, W>(string endpoint, out UnityWebRequest uwr, out IWorker <O, I> worker, I param,
                                             IWorker <O, I> workerDefault = null,
                                             string token = null, params IMultipartFormSection[] parts)
            where W : IWorker <O, I>, new()
            where O : class
            where I : class
        {
            bool useMock = false;

            url         = Instance.urlParam;
            TokenPrefix = Instance.tokenPrefix;
            string requestUrl = $"{url}/{endpoint}";

            if (endpoint.StartsWith("http", StringComparison.OrdinalIgnoreCase))
            {
                requestUrl = endpoint;
            }



            string json = null;

            byte[] jsonToSend = new byte[1];
            if (workerDefault == null)
            {
                worker = new W();
            }
            else
            {
                worker = workerDefault;
            }

            uwr = new UnityWebRequest($"{requestUrl}", "PUT");


            if (MocksResource != MocksResource.NONE)
            {
                var key = typeof(W).ToString();
                if (!mocks.ContainsKey(key))
                {
                    key = $"PUT:{endpoint}";
                }
                if (mocks.ContainsKey(key))
                {
                    ToolsDebug.Log($"Use mock for Key:{key} Value:{mocks[key]?.Substring(0, Mathf.Min(mocks[key].Length, Instance.logLimit))}");
                    useMock = true;
                }
                else
                {
                    ToolsDebug.Log($"Mocks for key {endpoint} or {typeof(W).ToString()} not found. Try real request.");
                }
            }

            if (typeof(I) == typeof(Texture2D))
            {
                Texture2D sendTexture = param as Texture2D;
                json              = "Texture2D";
                jsonToSend        = ImageConversion.EncodeToPNG(sendTexture);
                uwr.uploadHandler = (UploadHandler) new UploadHandlerRaw(jsonToSend);
                uwr.SetRequestHeader("Content-Type", "image/png");
            }
            else
            {
                if (param != null)
                {
                    json       = worker.Serialize(param);
                    jsonToSend = new System.Text.UTF8Encoding().GetBytes(json);
                }
                if (parts != null && parts.Length != 0)
                {
                    //TODO:
                    //Finish it
                    Debug.Log("WTF");
                    List <IMultipartFormSection> formData = new List <IMultipartFormSection>();
                    formData.Add(new MultipartFormDataSection("JSON Body", json, "application/json"));
                    formData.AddRange(parts);
                    var    boundary     = UnityWebRequest.GenerateBoundary();
                    byte[] formSections = UnityWebRequest.SerializeFormSections(formData, boundary);
                    uwr = UnityWebRequest.Put($"{requestUrl}", formSections);
                    uwr.SetRequestHeader("Content-Type", "multipart/form-data; boundary=" + System.Text.Encoding.UTF8.GetString(boundary));

                    uwr.uploadHandler.contentType = "multipart/form-data; boundary=" + System.Text.Encoding.UTF8.GetString(boundary);
                }
                else
                {
                    uwr.uploadHandler             = (UploadHandler) new UploadHandlerRaw(jsonToSend);
                    uwr.uploadHandler.contentType = "application/json";
                }
            }
            uwr.downloadHandler = (DownloadHandler) new DownloadHandlerBuffer();

            if (!string.IsNullOrEmpty(token))
            {
                uwr.SetRequestHeader("Authorization", $"{TokenPrefix} {token}");
            }


            ToolsDebug.Log($"{UnityWebRequest.kHttpVerbPUT}: {requestUrl} {uwr.GetRequestHeader("Authorization")} JSONBody:{json?.Substring(0, Mathf.Min(json.Length, Instance.logLimit))}");


            worker.Request = param;
            worker.Start();
            return(useMock);
        }
Пример #23
0
        private IEnumerator PublishWorldUpdates(string worldName)
        {
            string channelName = null;

            switch (preparedReleaseChannel)
            {
            case 0:
                channelName = "live";
                break;

            case 1:
                channelName = "beta";
                break;

            case 2:
                channelName = "alpha";
                break;
            }

            string uri = SDKUtil.API_ENDPOINT + "userworlds/" + userWorlds.First(w => w.key == worldName).id + "?channel=" + channelName;

            // extract data from world descriptor
            string worldJson = File.ReadAllText(GetWorldsRoot() + "/" + worldName + "/World.json");
            World  world     = JsonConvert.DeserializeObject <World>(worldJson);

            UserWorld userWorld = new UserWorld();

            userWorld.cover_image   = world.coverImage;
            userWorld.world_json    = worldJson;
            userWorld.unity_version = Application.unityVersion;
            userWorld.is_virtual    = (byte)(world.isVirtual ? 1 : 0);
            userWorld.android_size  = verifications[worldName].distroSizeAndroid;
            userWorld.pc_size       = verifications[worldName].distroSizeStandaloneWin;
            userWorld.linux_size    = verifications[worldName].distroSizeStandaloneLinux;

            // TODO: convert to SDKUtil function as well
            byte[] data = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(userWorld));
            using (UnityWebRequest webRequest = UnityWebRequest.Put(uri, data))
            {
                webRequest.SetRequestHeader("Accept", "application/json");
                webRequest.SetRequestHeader("Authorization", "Bearer " + GetAPIToken());
                webRequest.SetRequestHeader("Content-Type", "application/json");
                yield return(webRequest.SendWebRequest());

                if (webRequest.isNetworkError)
                {
                    Debug.LogError($"Could not update world {worldName} due to network issues: {webRequest.error}");
                    uploadErrors = true;
                }
                else if (webRequest.isHttpError)
                {
                    if (webRequest.responseCode == (int)HttpStatusCode.Unauthorized)
                    {
                        SDKUtil.invalidAPIToken = true;
                        Debug.LogError("Invalid or expired API Token.");
                    }
                    else
                    {
                        Debug.LogError($"There was an error updating world {worldName}: {webRequest.downloadHandler.text}");
                    }
                    uploadErrors = true;
                }
            }
        }
Пример #24
0
        public IEnumerator RequestSync(string url,
                                       HTTPMethods methods = HTTPMethods.Get,
                                       Dictionary <string, string> headers = null,
                                       WWWForm param = null,
                                       Action <DownloadHandler> onSuccess = null,
                                       Action <float> onProgress          = null,
                                       Action <DownloadHandler> onError   = null)
        {
            switch (methods)
            {
            case HTTPMethods.Get:
                StringBuilder getUrl = new StringBuilder(url);
                if (param != null)
                {
                    getUrl.Append("?");
                    getUrl.Append(Encoding.UTF8.GetString(param.data));
                }
                webRequest = UnityWebRequest.Get(getUrl.ToString());
                break;

            case HTTPMethods.Post:
                webRequest = UnityWebRequest.Post(url, param);
                break;

            case HTTPMethods.Put:
                byte[] bodyData = null;
                if (param != null)
                {
                    bodyData = param.data;
                }
                webRequest = UnityWebRequest.Put(url, bodyData);
                break;

            case HTTPMethods.Delete:
                StringBuilder deleteUrl = new StringBuilder(url);
                if (param != null)
                {
                    deleteUrl.Append("?");
                    deleteUrl.Append(Encoding.UTF8.GetString(param.data));
                }
                webRequest = UnityWebRequest.Delete(deleteUrl.ToString());
                break;

            case HTTPMethods.Head:
                StringBuilder headUrl = new StringBuilder(url);
                if (param != null)
                {
                    headUrl.Append("?");
                    headUrl.Append(Encoding.UTF8.GetString(param.data));
                }
                webRequest = UnityWebRequest.Head(headUrl.ToString());
                break;
            }
            if (headers != null)
            {
                foreach (KeyValuePair <string, string> header in headers)
                {
                    webRequest.SetRequestHeader(header.Key, header.Value);
                }
            }
            if (customDownloadHandler != null)
            {
                webRequest.downloadHandler = customDownloadHandler;
            }

            // 通信の前後でRequestとResponseのLogをとり、通信にかかった時間を計測する
            Stopwatch stopWatch = new Stopwatch();

            HTTPLogger.LogRequest(webRequest, param, headers);
            stopWatch.Start();
            webRequest.SendWebRequest();
            while (!webRequest.isDone)
            {
                if (onProgress != null)
                {
                    onProgress(webRequest.downloadProgress);
                }
                yield return(null);
            }
            if (onProgress != null)
            {
                onProgress(1.0f);
            }
            stopWatch.Stop();
            HTTPLogger.LogResponse(webRequest, stopWatch.Elapsed, param);

            if (webRequest.isHttpError)
            {
                if (onError != null)
                {
                    onError(webRequest.downloadHandler);
                }
            }
            else
            {
                if (onSuccess != null)
                {
                    onSuccess(webRequest.downloadHandler);
                }
            }
            yield return(webRequest.downloadHandler);

            customDownloadHandler = null;
        }
        public IEnumerator SendLogFileCoroutine(string logFilePath)
        {
            while (IsLogBeingSent)
            {
                yield return(null);
            }

            IsLogBeingSent = true;

            DebugLogger.Log("Sending log...");

            DebugLogger.Log("Requesting PUT URL...");

            var putLinkRequest = new PutLinkRequest()
            {
                AppId       = "patcher-unity",
                Version     = Version.Value,
                Priority    = "201",
                Guid        = Guid.ToString(),
                Compression = "gz"
            };

            string json = JsonConvert.SerializeObject(putLinkRequest);

            UnityWebRequest putUrlRequest = new UnityWebRequest(PutUrlRequestUrl, "POST");

            byte[] bodyRaw = Encoding.UTF8.GetBytes(json);
            putUrlRequest.uploadHandler   = new UploadHandlerRaw(bodyRaw);
            putUrlRequest.downloadHandler = new DownloadHandlerBuffer();
            putUrlRequest.SetRequestHeader("Content-Type", "application/json");

            yield return(putUrlRequest.Send());

#if UNITY_2017_1_OR_NEWER
            if (putUrlRequest.isNetworkError)
#else
            if (putUrlRequest.isError)
#endif
            {
                DebugLogger.LogError("Error while requesting PUT URL: " + putUrlRequest.error);
                IsLogBeingSent = false;
                yield break;
            }


            var responseText = putUrlRequest.downloadHandler.text;
            DebugLogger.Log("Got response: " + responseText);

            var requestPutUrlJson = JsonConvert.DeserializeObject <PutLinkResponse>(responseText);
            var putUrl            = requestPutUrlJson.Url;


            UnityWebRequest putRequest = UnityWebRequest.Put(putUrl, GetCompressedLogFileData(logFilePath));
            yield return(putRequest.Send());

#if UNITY_2017_1_OR_NEWER
            if (putRequest.isNetworkError)
#else
            if (putRequest.isError)
#endif
            {
                DebugLogger.LogError("Error while sending log file: " + putRequest.error);
                IsLogBeingSent = false;
                yield break;
            }

            DebugLogger.Log("Log file sent!");

            const float sendDelaySeconds = 5f;

            DebugLogger.Log(string.Format("Waiting {0} seconds before next log could be sent...", sendDelaySeconds));

            float startWaitTime = Time.unscaledTime;
            while (Time.unscaledTime - startWaitTime < sendDelaySeconds && !_shouldAbortSending)
            {
                yield return(null);
            }

            _shouldAbortSending = false;

            DebugLogger.Log("Next log can be now send.");

            IsLogBeingSent = false;
        }
Пример #26
0
        IEnumerator uploadMatchData()
        {
            //If still in game, get data from player else get data from lobby player
            if (isInGame)
            {
                Player[] players = FindObjectsOfType <Player>();
                string   disconnectPlayer;
                if (players[0].isLocalPlayer)
                {
                    //Condition to plus rating when opp disconnected
                    if ((players[0].score + players[0].totalScore) > (players[1].score + players[1].totalScore + 10))
                    {
                        MainPlayer.instance.playerData.rating += 5;
                    }
                    else
                    {
                        yield break;
                    }
                    disconnectPlayer = "player2";
                }
                else
                {
                    if ((players[1].score + players[1].totalScore) > (players[0].score + players[0].totalScore + 10))
                    {
                        MainPlayer.instance.playerData.rating += 5;
                    }
                    else
                    {
                        yield break;
                    }
                    disconnectPlayer = "player1";
                }
                string dataPlayer1 = JsonUtility.ToJson(players[0]);
                string dataPlayer2 = JsonUtility.ToJson(players[1]);
                using (UnityWebRequest www = UnityWebRequest.Put("http://powerlishproject.dx.am/uploadMatchData.php", dataPlayer1 + "/" + dataPlayer2 + "/" + disconnectPlayer + "/" + localNick + "/" + oppNick))
                {
                    www.SetRequestHeader("Content-Type", "application/json");
                    yield return(www.SendWebRequest());

                    if (www.isNetworkError || www.isHttpError)
                    {
                        Debug.Log(www.error);
                    }
                    else
                    {
                    }
                }
            }
            else
            {
                string dataPlayer1 = JsonUtility.ToJson(lobbySlots[0]);
                string dataPlayer2 = JsonUtility.ToJson(lobbySlots[1]);
                using (UnityWebRequest www = UnityWebRequest.Put("http://powerlishproject.dx.am/uploadMatchData.php", dataPlayer1 + "/" + dataPlayer2 + "/None/" + localNick + "/" + oppNick))
                {
                    www.SetRequestHeader("Content-Type", "application/json");
                    yield return(www.SendWebRequest());

                    if (www.isNetworkError || www.isHttpError)
                    {
                        Debug.Log(www.error);
                    }
                    else
                    {
                    }
                }
            }
        }
Пример #27
0
        private IEnumerator Login()
        {
            SDKLoginRequest loginRequest = new SDKLoginRequest();

            loginRequest.login    = emailField.text;
            loginRequest.password = passwordField.text;

            loginErrorText.gameObject.SetActive(false);

            string jsonString = JsonUtility.ToJson(loginRequest);

            //Debug.Log("jsonString: " + jsonString);
            byte[] myData = System.Text.Encoding.UTF8.GetBytes(jsonString);
            using (UnityWebRequest request = UnityWebRequest.Put(string.Format("{0}/{1}", m_server, "fcgi?6"), jsonString))
            {
                request.method          = UnityWebRequest.kHttpVerbPOST;
                request.useHttpContinue = false;
                request.SetRequestHeader("Content-Type", "application/json");
                request.SetRequestHeader("Accept", "application/json");
                yield return(request.SendWebRequest());

                //Debug.Log("Response code: " + request.responseCode);

                if (request.isNetworkError || request.isHttpError)
                {
                    Debug.Log(request.error);
                    if (request.responseCode == (long)HttpStatusCode.BadRequest)
                    {
                        loginErrorText.text = "Login failed, please try again";
                        loginErrorText.gameObject.SetActive(true);
                    }
                }
                else
                {
                    Debug.Log(request.downloadHandler.text);
                    PlayerPrefs.SetString("login", loginRequest.login);
                    PlayerPrefs.SetString("password", loginRequest.password);

                    SDKLoginResult loginResult = JsonUtility.FromJson <SDKLoginResult>(request.downloadHandler.text);
                    if (loginResult.error == "none")
                    {
                        PlayerPrefs.SetString("token", loginResult.token);
                        m_sdkSettings.developerToken = loginResult.token;

                        m_toggleMappingMode.EnableMappingMode();

                        if (m_toggleMappingMode.MappingUI != null)
                        {
                            m_toggleMappingMode.MappingUI.GetComponent <Mapper>().OnLogOut += OnLogOut;
                        }

                        loginErrorText.gameObject.SetActive(false);

                        FadeOut();
                    }
                    else if (loginResult.error == "auth")
                    {
                        loginErrorText.text = "Login failed, please try again";
                        loginErrorText.gameObject.SetActive(true);
                    }
                }
            }
        }
Пример #28
0
 private UnityWebRequest BasicPut(string endpt, string content = "", bool ignoreAuth = false)
 => WrapRequest(UnityWebRequest.Put(baseUrl + endpt, content), ignoreAuth);
Пример #29
0
    private IEnumerator JsonPost <T>(string urlPath, object data, Action <T> OnCompleted, Action <Exception> OnError, bool withAuth = true)
    {
        // The whole UnitytWebRequest.Put then changing method to POST thing is a janky workaround for JSON posting being broken in Unity...
        using (UnityWebRequest req = UnityWebRequest.Put(new Uri(Config.RootApiUri, urlPath), JsonConvert.SerializeObject(data)))
        {
            req.method = "POST";
            req.SetRequestHeader("Content-Type", "application/json");
            if (Data?.Token != null && withAuth)
            {
                string    authToken = null;
                Exception error     = null;
                yield return(GetAuthToken((a) => authToken = a, (e) => error = e));

                if (error != null)
                {
                    OnError?.Invoke(error);
                    yield break;
                }
                req.SetRequestHeader("Authorization", "Bearer " + authToken);
            }

            yield return(req.SendWebRequest());

            if (req.isNetworkError)
            {
                OnError(new SqApiNetworkException($"Unity Network Error: {req.error}"));
                yield break;
            }
            else if (req.isHttpError)
            {
                if (req.responseCode == 401 || req.responseCode == 403)
                {
                    OnError(new SqApiAuthException((int)req.responseCode, $"Unity Http Error: {req.error}"));
                    yield break;
                }
                else
                {
                    OnError(new SqApiAuthException((int)req.responseCode, $"Unity Http Error: {req.error}"));
                    yield break;
                }
            }
            if (req.responseCode == 204)
            {
                OnCompleted?.Invoke(default(T));
                yield break;
            }
            var resStr = req.downloadHandler.text;
            if (string.IsNullOrWhiteSpace(resStr))
            {
                OnCompleted?.Invoke(default(T));
                yield break;
            }
            else
            {
                try
                {
                    OnCompleted?.Invoke(JsonConvert.DeserializeObject <T>(resStr));
                    yield break;
                }
                catch (Exception ex)
                {
                    Debug.WriteLine("Failed deserializing response from API", ex);
                    OnError?.Invoke(ex);
                    yield break;
                }
            }
        }
    }
Пример #30
0
        System.Collections.IEnumerator ForceUploadLocalStorage(System.Action completed, System.Action failed)
        {
            bool hasFailed = false;

            while (linesizes.Count > 1)
            {
                //get contents from file
                int contentsize = linesizes.Pop();
                int urlsize     = linesizes.Pop();

                int lastrequestsize = contentsize + urlsize + EOLByteCount + EOLByteCount;

                fs.Seek(-lastrequestsize, SeekOrigin.End);

                long originallength = fs.Length;

                string tempurl     = null;
                string tempcontent = null;
                char[] buffer      = new char[urlsize];
                while (sr.Peek() != -1)
                {
                    sr.ReadBlock(buffer, 0, urlsize);

                    tempurl = new string(buffer);
                    //line return
                    for (int eolc = 0; eolc < EOLByteCount; eolc++)
                    {
                        sr.Read();
                    }


                    buffer = new char[contentsize];
                    sr.ReadBlock(buffer, 0, contentsize);
                    tempcontent = new string(buffer);
                    //line return
                    for (int eolc2 = 0; eolc2 < EOLByteCount; eolc2++)
                    {
                        sr.Read();
                    }
                }

                fs.SetLength(originallength - lastrequestsize);

                //wait for post response
                var bytes = System.Text.UTF8Encoding.UTF8.GetBytes(tempcontent);
                using (UnityWebRequest request = UnityWebRequest.Put(tempurl, bytes))
                {
                    request.method = "POST";
                    request.SetRequestHeader("Content-Type", "application/json");
                    request.SetRequestHeader("X-HTTP-Method-Override", "POST");
                    request.SetRequestHeader("Authorization", CognitiveStatics.ApplicationKey);
                    yield return(Sender.StartCoroutine(Sender.WaitForFullResponse(request, tempcontent, Sender.GenericPostFullResponse, false)));

                    //check internet access
                    var headers      = request.GetResponseHeaders();
                    int responsecode = (int)request.responseCode;
                    if (responsecode == 200)
                    {
                        //check cvr header to make sure not blocked by capture portal
                        if (!headers.ContainsKey("cvr-request-time"))
                        {
                            hasFailed = true;
                            if (failed != null)
                            {
                                failed.Invoke();
                            }
                            yield break;
                        }
                    }
                    else
                    {
                        hasFailed = true;
                        if (failed != null)
                        {
                            failed.Invoke();
                        }
                        yield break;
                    }
                }
            }

            if (!hasFailed)
            {
                if (completed != null)
                {
                    completed.Invoke();
                }
            }
        }