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()); }
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()); }