Ejemplo n.º 1
0
        /// <summary>
        /// Syncs with DB. returns newest.
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="entity"></param>
        /// <returns></returns>
        public UnityTask <T> Sync <T>(T entity) where T : class
        {
            var task = new UnityTask <T>(TaskStrategy.Custom);

            Sync(entity, task.FromResponse());
            return(task);
        }
Ejemplo n.º 2
0
        IEnumerator DiablePresenceAsync(UnityTask <string> task)
        {
            var btask = BalancerClient.GetServerUrl(Url, IsCluster, ApplicationKey);

            yield return(TaskManager.StartRoutine(btask.WaitRoutine()));

            if (btask.IsFaulted)
            {
                task.Exception = btask.Exception;
                task.Status    = TaskStatus.Faulted;
                yield break;
            }

            var server      = btask.Result;
            var presenceUrl = String.IsNullOrEmpty(server) ? server : server[server.Length - 1] == '/' ? server : server + "/";

            presenceUrl = String.Format("{0}presence/disable/{1}/{2}", presenceUrl, ApplicationKey, Channel);
            var content = String.Format("privatekey={0}", PrivateKey);

            var htask = HttpClient.PostAsync(presenceUrl, content);

            yield return(TaskManager.StartRoutine(htask.WaitRoutine()));

            if (htask.IsFaulted)
            {
                task.Exception = htask.Exception;
                task.Status    = TaskStatus.Faulted;
                yield break;
            }

            task.Result = htask.Content;
        }
 public void CreateAndRun()
 {
     UnityTask.Run(() =>
     {
         var result = FindPrimeNumber(1000);
     });
 }
Ejemplo n.º 4
0
        /// <summary>
        /// Tells the server to send out an recovery email. This email will contain a reset token.
        /// </summary>
        /// <param name="email"></param>
        /// <returns></returns>
        public UnityTask Reset(string email)
        {
            var task = new UnityTask(TaskStrategy.Custom);

            Reset(email, task.FromResponse());
            return(task);
        }
Ejemplo n.º 5
0
        IEnumerator TaskAsync(UnityTask task, bool hault = true)
        {
            yield return(1);

            yield return(task);

            if (task.IsFaulted)
            {
                if (task.Exception is HttpException)
                {
                    var hte = task.Exception as HttpException;
                    foreach (var error in hte.GetErrors())
                    {
                        Debug.LogError(error);
                    }
                }
                else
                {
                    Debug.LogError(task.Exception.Message);
                }

                if (hault)
                {
                    Debug.LogError("Haulting");
                    StopAllCoroutines();

                    while (true)
                    {
                        yield return(1);
                    }
                }
            }

            yield return(1);
        }
Ejemplo n.º 6
0
        IEnumerator GetUrlFromCluster(UnityTask task)
        {
            if (PrototypeUri.IsCluster)
            {
                var request = new Uri(PrototypeUri.IsSecure ? "https://" + PrototypeUri.Url + "/server/ssl/1.0" : "http://" + PrototypeUri.Url + "/server/1.0");

                var www = Client.GetAsync(request.ToString());

                yield return(TaskManager.StartRoutine(www.WaitRoutine()));

                if (www.IsFaulted)
                {
                    task.Status    = TaskStatus.Faulted;
                    task.Exception = www.Exception;
                    yield break;
                }

                var response = JsonMapper.ToObject <ClusterResponse>(www.Content).url;

                EnpointUri = new Uri(response);

                //var request = new Uri(PrototypeUri.IsSecure ? "https://" + PrototypeUri.Url + "/server/ssl/1.0" : "http://" + PrototypeUri.Url + "/server/1.0");
                //var response = ClusterClient.GetClusterServer(request.ToString(), ApplicationKey);
                //EnpointUri = new Uri(response);
            }
            else
            {
                EnpointUri = new Uri(PrototypeUri.IsSecure ? "https://" + PrototypeUri.Url : "http://" + PrototypeUri.Url);
                //EnpointUri = new Uri(PrototypeUri.IsSecure ? "https://" + PrototypeUri.Url + "/server/ssl/1.0" : "http://" + PrototypeUri.Url + "/server/1.0");
            }
        }
Ejemplo n.º 7
0
        /// <summary>
        /// Requests a new guest account. Use for 'Skip Sign In' option.
        /// </summary>
        /// <returns></returns>
        public UnityTask Guest()
        {
            var task = new UnityTask(TaskStrategy.Custom);

            Guest(task.FromResponse());
            return(task);
        }
Ejemplo n.º 8
0
 public static void runInUnityThread(UnityTask task)
 {
     lock (taskList)
     {
         taskList.Add(task);
     }
 }
Ejemplo n.º 9
0
        IEnumerator Test5(UnityTask UnityTask)
        {
            yield return(1);

            Counter++;
            Debug.Log("5 Coroutine with UnityTask");
        }
Ejemplo n.º 10
0
        /// <summary>
        /// Deletes the entity serverside
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="entity"></param>
        /// <returns></returns>
        public UnityTask Delete <T>(T entity) where T : class
        {
            var task = new UnityTask(TaskStrategy.Custom);

            Delete(entity, task.FromResponse());
            return(task);
        }
Ejemplo n.º 11
0
        IEnumerator DemoCoroutineWithResult(UnityTask <string> task)
        {
            yield return(1);

            Counter++;
            task.Result = "Hello";
        }
Ejemplo n.º 12
0
        /// <summary>
        /// Increments / Decrements a single property.
        /// </summary>
        /// <param name="id">ObjectId</param>
        /// <param name="propertyName"></param>
        /// <param name="delta">change</param>
        /// <returns></returns>
        public UnityTask UpdateDelta(string id, string propertyName, int delta = 1)
        {
            var task = new UnityTask(TaskStrategy.Custom);

            UpdateDelta(id, propertyName, delta, task.FromResponse());
            return(task);
        }
Ejemplo n.º 13
0
        /// <summary>
        /// Updates a single property on an existing object
        /// </summary>
        /// <param name="id">ObjectId</param>
        /// <param name="propertyName"></param>
        /// <param name="propertyValue"></param>
        /// <returns></returns>
        public UnityTask UpdateProperty(string id, string propertyName, string propertyValue)
        {
            var task = new UnityTask(TaskStrategy.Custom);

            UpdateProperty(id, propertyName, propertyValue, task.FromResponse());
            return(task);
        }
Ejemplo n.º 14
0
        /// <summary>
        /// Saves an existing object set serverside
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="entities"></param>
        /// <returns></returns>
        public UnityTask UpdateSet <T>(T[] entities) where T : class
        {
            var task = new UnityTask(TaskStrategy.Custom);

            UpdateSet(entities, task.FromResponse());
            return(task);
        }
Ejemplo n.º 15
0
        private void DrawElementCallback(Rect rect, int index, bool isActive, bool isFocused)
        {
            Rect labelRect = new Rect(rect.x, rect.y, rect.xMax - 45f, 15f);
            Rect plusRect  = new Rect(rect.xMax - 8f - 25f, rect.y, 25f, 13f);

            string str = _fileList[index].Title;

            GUI.Label(labelRect, str);


            if (GUI.Button(plusRect, iconToolbarPlus, preButton))
            {
                UnityTask.Run(async() =>
                {
                    try
                    {
                        bool res = await CloudFileWatcher.DownloadFileAsync(SettingsDrawer.UserID, _fileList[index]);
                        if (!res)
                        {
                            Debug.LogWarning($"Could not download the file [{_fileList[index].Title}]");
                        }
                    }
                    catch (Exception e)
                    {
                        Debug.LogError("Exception thrown while downloading the file: " + e.Message + "\nInner Message: " + e.InnerException?.Message);
                    }
                });
            }

            if (index + 1 < _list.count)
            {
                DrawingHelper.Separator(new Rect(labelRect.x, labelRect.y + EditorGUIUtility.singleLineHeight + 1.5f, rect.width, 1.2f));
            }
        }
Ejemplo n.º 16
0
        IEnumerator Test8(UnityTask <string> UnityTask)
        {
            yield return(1);

            Counter++;
            UnityTask.Result = "8 Coroutine With Result";
        }
Ejemplo n.º 17
0
        /// <summary>
        /// 分配座位
        /// </summary>
        private UnityTask InitSeat()
        {
            //假设目前是进入的一个房间,房间中是已经有其它玩家的,此时需要先根据情况分配他们的座位在自己客户端上
            var players = _netComponent.WebClient.Room.PlayerList;

            List <UnityTask> tasks = (players.Select(player =>
            {
                player.CustomProperties.TryGetString("Seat", out var seat);
                return(new { player, seat });
            })
                                      .Where(@t1 => !string.IsNullOrEmpty(@t1.seat))
                                      .Select(@t1 => new AVQuery <Player>()
                                              .WhereEqualTo(_netComponent.GetProperty <Player>(p => p.UserId), @t1.player.UserId)
                                              .FirstOrDefaultAsync()
                                              .ContinueToForeground(t =>
            {
                _seats[int.Parse(@t1.seat)].Item2.text = t.Result.PetName;
                //_playerToggle.transform.GetChild(int.Parse(@t1.seat)).GetComponentInChildren<Text>().text =
                //    t.Result.PetName;
                return(0);
            }))).Cast <UnityTask>()
                                     .ToList();

            return(UnityTask.WhenAll(tasks));
        }
Ejemplo n.º 18
0
        IEnumerator Test9(UnityTask <string> UnityTask)
        {
            yield return(1);

            UnityTask.Result = ("9 Coroutine with UnityTask State Complete");
            Counter++;
        }
Ejemplo n.º 19
0
        IEnumerator PostAsync <T>(UnityTask <StorageResponse <T> > task, string operation, string body)
        {
            // Confirm Endpoint URI
            if (EnpointUri == null)
            {
                var urlTask = new UnityTask(TaskStrategy.Custom);


                yield return(TaskManager.StartRoutine(GetUrlFromCluster(urlTask)));

                if (EnpointUri == null)
                {
                    task.Exception = new Exception("Failed to get cluster url");
                    task.Status    = TaskStatus.Faulted;
                    yield break;
                }
            }

            var url = EnpointUri.ToString().EndsWith("/") ? EnpointUri + operation : EnpointUri + "/" + operation;
            var www = Client.PostAsync(url, body);

            yield return(TaskManager.StartRoutine(www.WaitRoutine()));

            if (www.IsFaulted)
            {
                task.Exception = www.Exception;
                task.Status    = TaskStatus.Faulted;
                yield break;
            }

            Log(www.Content);

            task.Result = JsonMapper.ToObject <StorageResponse <T> >(www.Content);
            task.Status = TaskStatus.Success;
        }
Ejemplo n.º 20
0
        void BackgroundToBackgroundException()
        {
            var task1 = UnityTask.Run(() =>
            {
                Debug.Log("1 Go");

                var task2 = UnityTask.Run(() =>
                {
                    UnityTask.Delay(100);
                    Debug.Log("2 Go");
                    throw new Exception("2 Fail");
                });

                task2.Wait();

                if (task2.IsFaulted)
                {
                    throw task2.Exception;
                }
            });

            task1.Wait();

            Debug.Log(task1.Status + " " + task1.Exception.Message);
        }
Ejemplo n.º 21
0
        /// <summary>
        /// Update account details
        /// </summary>
        /// <param name="email"></param>
        /// <param name="password"></param>
        /// <returns></returns>
        public UnityTask Update(string email, string password)
        {
            var task = new UnityTask(TaskStrategy.Custom);

            Update(email, password, task.FromResponse());
            return(task);
        }
        /// <summary>
        /// Saves the authentication token channels permissions in the ORTC server.
        /// </summary>
        public UnityTask <bool> PostAuthentication()
        {
            #region Sanity Checks

            if (String.IsNullOrEmpty(Url))
            {
                return(UnityTask.FailedTask <bool>(new OrtcException(OrtcExceptionReason.InvalidArguments, "URL is null or empty.")));
            }
            if (String.IsNullOrEmpty(ApplicationKey))
            {
                return(UnityTask.FailedTask <bool>(new OrtcException(OrtcExceptionReason.InvalidArguments, "Application Key is null or empty.")));
            }
            if (String.IsNullOrEmpty(AuthenticationToken))
            {
                return(UnityTask.FailedTask <bool>(new OrtcException(OrtcExceptionReason.InvalidArguments, "Authentication Token is null or empty.")));
            }
            if (String.IsNullOrEmpty(PrivateKey))
            {
                return(UnityTask.FailedTask <bool>(new OrtcException(OrtcExceptionReason.InvalidArguments, "Private Key is null or empty.")));
            }
            if (Permissions != null && Permissions.Count == 0)
            {
                return(UnityTask.FailedTask <bool>(new OrtcException(OrtcExceptionReason.InvalidArguments, "No permissions set.")));
            }

            #endregion

            return(UnityTask.RunCoroutine <bool>(PostAuthenticationAsync));
        }
Ejemplo n.º 23
0
        /// <summary>
        /// Deletes the current account
        /// </summary>
        /// <param name="password"></param>
        /// <returns></returns>
        public UnityTask Delete(string password)
        {
            var task = new UnityTask(TaskStrategy.Custom);

            Delete(password, task.FromResponse());
            return(task);
        }
Ejemplo n.º 24
0
        public void TaskDoesEndOnResolveAndReject()
        {
            bool value       = false;
            bool targetValue = true;

            UnityTask t = new UnityTask();

            t.Then(onEnd: () => value = targetValue);

            t.Resolve(null);

            Assert.AreEqual(value, targetValue);

            value = false;

            t = new UnityTask();
            t.Then(onEnd: () => value = targetValue);

            t.Reject(null);

            Assert.AreEqual(value, targetValue);

            value = false;

            t = new UnityTask();
            t.Then(onEnd: () => value = targetValue);

            t.Notify(0f);

            Assert.AreNotEqual(value, targetValue);
        }
Ejemplo n.º 25
0
        IEnumerator GetPresenceAsync(UnityTask <Presence> task)
        {
            var btask = BalancerClient.GetServerUrl(Url, IsCluster, ApplicationKey);

            yield return(TaskManager.StartRoutine(btask.WaitRoutine()));

            if (btask.IsFaulted)
            {
                task.Exception = btask.Exception;
                task.Status    = TaskStatus.Faulted;
                yield break;
            }

            var server = btask.Result;

            var presenceUrl = String.IsNullOrEmpty(server) ? server : server[server.Length - 1] == '/' ? server : server + "/";

            presenceUrl = String.Format("{0}presence/{1}/{2}/{3}", presenceUrl, ApplicationKey, AuthenticationToken, Channel);

            var htask = HttpClient.GetAsync(presenceUrl);

            yield return(TaskManager.StartRoutine(htask.WaitRoutine()));

            if (htask.IsFaulted)
            {
                task.Exception = htask.Exception;
                task.Status    = TaskStatus.Faulted;
                yield break;
            }

            task.Result = Deserialize(htask.Content);
        }
Ejemplo n.º 26
0
        IEnumerator GetClusterServerWithRetryAsync(UnityTask <string> task)
        {
            int currentAttempts;

            for (currentAttempts = 0; currentAttempts <= MaxConnectionAttempts; currentAttempts++)
            {
                var innerTask = GetClusterServer();

                yield return(TaskManager.StartRoutine(innerTask.WaitRoutine()));

                task.Result = innerTask.Result;

                if (innerTask.IsSuccess && !String.IsNullOrEmpty(task.Result))
                {
                    yield break;
                }

                currentAttempts++;

                if (currentAttempts > MaxConnectionAttempts)
                {
                    task.Exception = new OrtcException(OrtcExceptionReason.ConnectionError, "Unable to connect to the authentication server.");
                    task.Status    = TaskStatus.Faulted;
                    yield break;
                }

                yield return(TaskManager.WaitForSeconds(RetryThreadSleep));
            }
        }
Ejemplo n.º 27
0
        public UnityTask <List <CharacterResult> > GetUserCharacters(bool forceUpdate = false)
        {
            if (forceUpdate)
            {
                this.characterCache = null;
            }

            if (this.characterCache != null)
            {
                return(UnityTask <List <CharacterResult> > .Empty(this.characterCache));
            }
            else
            {
                return(UnityTask <List <CharacterResult> > .Run(FetchCharacters()));
            }

            IEnumerator <List <CharacterResult> > FetchCharacters()
            {
                var getCharacters = this.playfabManager.Do <ListUsersCharactersRequest, ListUsersCharactersResult>(new ListUsersCharactersRequest(), PlayFabClientAPI.GetAllUsersCharactersAsync);

                while (getCharacters.IsDone == false)
                {
                    yield return(null);
                }

                this.characterCache = getCharacters.Value.Characters;

                yield return(this.characterCache);
            }
        }
Ejemplo n.º 28
0
    void Update()
    {
        // Starting more than one (1) Task per update seems to slow down the UI
        // This ensures that only one(1) Task is started per frame (as long as maxTasksPerUpdate=1)
        int tasksEnqueuedThisUpdate = 0;

        for (int i = 0; i < scheduledTasks.Count; i++)
        {
            if (tasksEnqueuedThisUpdate < maxTasksPerUpdate)
            {
                UnityTask task = scheduledTasks.Dequeue();
                runningTasks.Enqueue(task);
                task.task.Start();
                tasksEnqueuedThisUpdate++;
            }
            else
            {
                break;
            }
        }

        // Executing callbacks on more than one (1) Task per update slows down the UI
        // This ensures that only one(1) Task callback is executed per frame
        for (int i = 0; i < runningTasks.Count; i++)
        {
            if (runningTasks.Peek().task.IsCompleted)
            {
                runningTasks.Dequeue().OnTaskCompleted();
                break;
            }
        }
    }
Ejemplo n.º 29
0
        /// <summary>
        /// New account created in memory
        /// </summary>
        /// <returns>Realtime Authentication Token to use</returns>
        public UnityTask <RealtimeToken> SignIn(Dictionary <string, string[]> channels = null)
        {
            var task = new UnityTask <RealtimeToken>(TaskStrategy.Custom);

            SignIn(channels, task.FromResponse());
            return(task);
        }
Ejemplo n.º 30
0
        /// <summary>
        /// Saves a new object serverside. Includes write protection (AVL).
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="entity"></param>
        /// <param name="acl">protection group</param>
        /// <param name="param">User name</param>
        /// <returns></returns>
        public UnityTask Create <T>(T entity, StorageACL acl, string param) where T : class
        {
            var task = new UnityTask(TaskStrategy.Custom);

            Create(entity, acl, param, task.FromResponse());
            return(task);
        }