コード例 #1
0
        public Promise UpdateDataLatent(object data, Type dataType)
        {
            object latentData = Serializer.Helper.Clone(data);

            _cache[dataType] = data;
            Deferred deferred = new Deferred();
            string   path     = Path.Combine(Application.persistentDataPath, string.Format("{0}", Base64Encode(dataType.AssemblyQualifiedName)));

            ThreadPool.QueueUserWorkItem(state =>
            {
                lock (this)
                {
                    SafeSaveData(latentData, path);
                    lock (_defferedLockObject)
                    {
                        _resolvedPromise.Enqueue(deferred);
                    }
                }
            });
            return(deferred.Promise());
        }
コード例 #2
0
        private Promise InternalFullUpdate()
        {
            Deferred deferred = new Deferred();

            if (!IsRegistered)
            {
                deferred.Reject();
                return(deferred.Promise());
            }
            UserInfo userInfo = ServiceLocator.Resolve <IStorageService>().ResolveData <UserInfo>() ?? new UserInfo();

            if (!userInfo.AddedScoreBalance.IsEmpty())
            {
                userInfo.NotSyncedScoreBalances.Add(Guid.NewGuid().ToString(), userInfo.AddedScoreBalance);
            }
            userInfo.AddedScoreBalance = new ScoreBalance();
            FullData fullData = new FullData();

            fullData.AddScoreDatas =
                userInfo.NotSyncedScoreBalances.Select(
                    pair => new AddScoreData {
                Token = pair.Key, Score = pair.Value.Score, Values = pair.Value.Balance
            })
                .ToArray();
            fullData.AchievementIds =
                ((AchievementService)ServiceLocator.Resolve <IAchievementService>()).GetNotSyncAchievementIds();
            fullData.PurchasedItemIds = ((StoreService)ServiceLocator.Resolve <IStoreService>()).GetNotPurchasableIds();
            if (fullData.AddScoreDatas.Length == 0 && fullData.AchievementIds.Length == 0 &&
                fullData.PurchasedItemIds.Length == 0)
            {
                deferred.Resolve();
                return(deferred.Promise());
            }
            ServiceLocator.Resolve <IServerService>().CallTokenFull <FullDataResult>("FullUpdateData", fullData).Then(
                result =>
            {
                UserInfo info = ServiceLocator.Resolve <IStorageService>().ResolveData <UserInfo>() ?? new UserInfo();
                info.Score    = result.UserData.Score;
                info.Balance  = result.UserData.Values;
                if (!userInfo.AddedScoreBalance.IsEmpty())
                {
                    info.Score   += userInfo.AddedScoreBalance.Score;
                    info.Balance += userInfo.AddedScoreBalance.Balance;
                }
                info.NotSyncedScoreBalances = new Dictionary <string, ScoreBalance>();
                ServiceLocator.Resolve <IStorageService>().UpdateData(info);
                ServiceLocator.Resolve <IServerService>().Call <ServerAchievement[]>("GetAchievements", null).Then(
                    achievements =>
                {
                    ServiceLocator.Resolve <IServerService>()
                    .Call <string[]>("GetClaimedAchievements", null)
                    .Then(
                        claimedAchievements =>
                    {
                        ((AchievementService)ServiceLocator.Resolve <IAchievementService>())
                        .OnServerAchievementResolved(
                            achievements.ToDictionary(achievement => achievement.AchievementId,
                                                      achievement =>
                                                      new AchievementService.ServerAchievementInfo
                        {
                            Balance = new Balance {
                                Values = achievement.Values
                            },
                            Score = achievement.Score
                        }), claimedAchievements);
                        ServiceLocator.Resolve <IServerService>().Call <ServerPurchasableItem[]>("GetItems", null).Then(
                            items =>
                        {
                            ServiceLocator.Resolve <IServerService>().Call <string[]>("GetPurchasedItems", null).Then(
                                purchasedItems =>
                            {
                                ((StoreService)ServiceLocator.Resolve <IStoreService>())
                                .OnServerPurchaseResolved(
                                    items.ToDictionary(item => item.ItemId,
                                                       item => new ItemCosts
                                {
                                    Purchase =
                                        new Balance {
                                        Values = item.PurchaseCost
                                    },
                                    Rent = new Balance {
                                        Values = item.RentCost
                                    }
                                }), purchasedItems);
                                deferred.Resolve();
                            }, () => deferred.Reject());
                        }, () => deferred.Reject());
                    }, () => deferred.Reject());
                }, () => deferred.Reject());
            }, () => deferred.Reject());
            return(deferred.Promise());
        }