示例#1
0
        private void Setup()
        {
            if (IsSetupCalled)
            {
                return;
            }
            IsSetupCalled = true;

            HTTPManager.Setup();

#if UNITY_WEBGL && !UNITY_EDITOR
            // Threads are not implemented in WEBGL builds, disable it for now.
            IsThreaded = false;
#endif
            if (IsThreaded)
            {
                PlatformSupport.Threading.ThreadedRunner.RunLongLiving(ThreadFunc);
            }

            // Unity doesn't tolerate well if the DontDestroyOnLoad called when purely in editor mode. So, we will set the flag
            //  only when we are playing, or not in the editor.
            if (!Application.isEditor || Application.isPlaying)
            {
                GameObject.DontDestroyOnLoad(this.gameObject);
            }

            HTTPManager.Logger.Information("HTTPUpdateDelegator", "Setup done!");
        }
        public static Task <T> CreateTask <T>(HTTPRequest request, CancellationToken token, Action <HTTPRequest, HTTPResponse, TaskCompletionSource <T> > callback)
        {
            HTTPManager.Setup();

            var tcs = new TaskCompletionSource <T>();

            request.Callback = (req, resp) =>
            {
                if (token.IsCancellationRequested)
                {
                    tcs.SetCanceled();
                }
                else
                {
                    callback(req, resp, tcs);
                }
            };

            if (token.CanBeCanceled)
            {
                token.Register((state) => (state as HTTPRequest)?.Abort(), request);
            }

            if (request.State == HTTPRequestStates.Initial)
            {
                request.Send();
            }

            return(tcs.Task);
        }
示例#3
0
        public static HTTPRequest SendRequest(HTTPRequest request)
        {
            object locker = HTTPManager.Locker;

            lock (locker)
            {
                HTTPManager.Setup();
                if (HTTPManager.IsCallingCallbacks)
                {
                    request.State = HTTPRequestStates.Queued;
                    HTTPManager.RequestQueue.Add(request);
                }
                else
                {
                    HTTPManager.SendRequestImpl(request);
                }
            }
            return(request);
        }