public ComplitionPromise <ServerSettings> ResolveServerSettings()
        {
            if (_deferreds.Count > 0)
            {
                ComplitionDeferred <ServerSettings> deferred = new ComplitionDeferred <ServerSettings>();
                _deferreds.Add(deferred);
                return(deferred.Promise());
            }
            ComplitionDeferred <ServerSettings> result = new ComplitionDeferred <ServerSettings>();

            _deferreds.Add(result);
            ServiceLocator.Resolve <IServerService>().Call <ServerSettings>("GetSettings").Then(settings =>
            {
                ComplitionDeferred <ServerSettings>[] complitionDeferreds = _deferreds.ToArray();
                _deferreds.Clear();
                ServiceLocator.Resolve <IStorageService>().UpdateData(settings);
                foreach (ComplitionDeferred <ServerSettings> deferred in complitionDeferreds)
                {
                    deferred.Resolve(settings);
                }
            }, () =>
            {
                ComplitionDeferred <ServerSettings>[] complitionDeferreds = _deferreds.ToArray();
                _deferreds.Clear();
                foreach (ComplitionDeferred <ServerSettings> deferred in complitionDeferreds)
                {
                    deferred.Reject();
                }
            });
            return(result.Promise());
        }
Beispiel #2
0
        public void Return(object context)
        {
            _lastContext = null;
            if (_lastLoadDeferred != null)
            {
                ComplitionDeferred <object> lastLoadDeferred = _lastLoadDeferred;
                _lastLoadDeferred = null;
                lastLoadDeferred.Resolve(context);
            }
            string sceneName = _sceneStack.Pop();

            SceneManager.LoadScene(FixSceneName(sceneName));
        }
        public static ComplitionPromise <IapPackageInfo[]> ResolvePackages <T>(this IStoreService storeService) where T : IapPackageInfo
        {
            ComplitionDeferred <IapPackageInfo[]> deferred = new ComplitionDeferred <IapPackageInfo[]>();

            storeService.ResolvePackages().Then(infos =>
            {
                deferred.Resolve(
                    infos.Where(
                        info =>
                        info is T ||
                        ((info is DiscountIapPackage) && ((DiscountIapPackage)info).PackageData.IapPackageInfo is T))
                    .ToArray());
            }, () => deferred.Reject());
            return(deferred.Promise());
        }
Beispiel #4
0
        public ComplitionPromise <LeaderBoardUser[]> ResolveLeaderBoardUsers()
        {
            if (!ServiceLocator.Resolve <IUserManagementService>().IsRegistered)
            {
                throw new Exception("Leaderboard can only be resolve for registered users");
            }
            ComplitionDeferred <LeaderBoardUser[]> deferred = new ComplitionDeferred <LeaderBoardUser[]>();

            ServiceLocator.Resolve <IUserManagementService>().FullUpdate().Then(() =>
            {
                ServiceLocator.Resolve <IServerService>().Call <LeaderboardData>("GetLeaderboard").Then(data =>
                {
                    List <LeaderBoardUser> leaderBoardUsers = new List <LeaderBoardUser>();
                    string username = ServiceLocator.Resolve <IUserManagementService>().Username;
                    for (int i = 0; i < data.TopPlayers.Length; i++)
                    {
                        leaderBoardUsers.Add(new LeaderBoardUser
                        {
                            UserName      = data.TopPlayers[i].UserName,
                            Score         = data.TopPlayers[i].Score,
                            Rank          = i,
                            IsCurrentUser = string.Equals(data.TopPlayers[i].UserName, username)
                        });
                    }

                    int userRankStartRank = data.Rank -
                                            data.UserRank.ToList().FindIndex(user => string.Equals(user.UserName, username));
                    for (int i = 0; i < data.UserRank.Length; i++)
                    {
                        if (!leaderBoardUsers.Any(user => string.Equals(user.UserName, data.UserRank[i].UserName)))
                        {
                            leaderBoardUsers.Add(new LeaderBoardUser
                            {
                                UserName      = data.UserRank[i].UserName,
                                Score         = data.UserRank[i].Score,
                                Rank          = userRankStartRank + i,
                                IsCurrentUser = string.Equals(data.UserRank[i].UserName, username)
                            });
                        }
                    }
                    leaderBoardUsers.Sort((user, boardUser) => user.Score.CompareTo(boardUser.Rank));
                    deferred.Resolve(leaderBoardUsers.ToArray());
                }, () => deferred.Reject());
            }, () => deferred.Reject());
            return(deferred.Promise());
        }
        public ComplitionPromise <T> CallTokenFull <T>(string functionName, object requestBody)
        {
            ComplitionDeferred <T> deferred = new ComplitionDeferred <T>();

            Call <string>("GetToken", null).Then(token =>
            {
                int[] tokens = GetTokens();

                Call <T>(functionName,
                         new TokenFullData
                {
                    Data   = requestBody,
                    Tokens =
                        new Guid(token).ToByteArray()
                        .Select(b => (int)b)
                        .Select((i, index) => i ^ tokens[index])
                        .ToArray()
                }).Then(obj => deferred.Resolve(obj), () => deferred.Reject());
            }, () => deferred.Reject());
            return(deferred.Promise());
        }
        public ComplitionPromise <T> Call <T>(string functionName, object requestBody)
        {
            ComplitionDeferred <T> deferred = new ComplitionDeferred <T>();

            InfoResolver.Resolve <FortInfo>().ServerConnectionProvider.UserConnection.Call <T>(functionName, requestBody).Then(obj => deferred.Resolve(obj),
                                                                                                                               error =>
            {
                if (error.ErrorType == CallErrorType.UnAuthorize)
                {
                    if (!ServiceLocator.Resolve <IUserManagementService>().IsRegistered)
                    {
                        deferred.Reject();
                    }
                    else
                    {
                        if (
                            !InfoResolver.Resolve <FortInfo>()
                            .ServerConnectionProvider.UserConnection.IsReloginCapable())
                        {
                            deferred.Reject();
                        }
                        else
                        {
                            InfoResolver.Resolve <FortInfo>().ServerConnectionProvider.UserConnection.Relogin().Then(
                                () =>
                            {
                                InfoResolver.Resolve <FortInfo>()
                                .ServerConnectionProvider.UserConnection.Call <T>(functionName, requestBody)
                                .Then(obj => deferred.Resolve(obj), callError => deferred.Reject());
                            }, () => deferred.Reject());
                        }
                    }
                }
            });

            return(deferred.Promise());
        }
Beispiel #7
0
 public ComplitionPromise <object> Load(SceneLoadParameters parameters)
 {
     ServiceLocator.Resolve <IAnalyticsService>().StatSceneLoaded(parameters.SceneName);
     _lastContext = null;
     if (_lastLoadDeferred != null)
     {
         ComplitionDeferred <object> lastLoadDeferred = _lastLoadDeferred;
         _lastLoadDeferred = null;
         lastLoadDeferred.Resolve(parameters.Context);
     }
     _captureReturnKey = parameters.CaptureReturnKey;
     _lastLoadDeferred = new ComplitionDeferred <object>();
     if (parameters.FlushSceneStack)
     {
         _sceneStack.Clear();
     }
     if (parameters.AddToSceneStack)
     {
         _sceneStack.Push(SceneManager.GetActiveScene().name);
     }
     _lastContext = parameters.Context;
     SceneManager.LoadScene(FixSceneName(parameters.SceneName));
     return(_lastLoadDeferred.Promise());
 }