|
- using System;
- using CIG.Extensions;
- using CIG.Translation;
- using CIGEnums;
- using SUISS.Core;
- using UnityEngine;
-
- namespace CIG
- {
- public sealed class PurchaseHandler : MonoBehaviour
- {
- private void OnDestroy()
- {
- this.CancelInvoke(new Action(this.TryConsumingPurchases));
- this.CancelInvoke(new Action(this.ValidatePurchases));
- if (this._store != null)
- {
- this._store.PurchaseSuccessEvent -= this.OnPurchaseSuccess;
- this._store.PurchaseFailedEvent -= this.OnPurchaseFailed;
- this._store.PurchaseDeferredEvent -= this.OnPurchaseDeferred;
- this._store = null;
- }
- }
-
- public void Init(IAPStore<CIG3StoreProduct> store)
- {
- this._store = store;
- this._store.PurchaseSuccessEvent += this.OnPurchaseSuccess;
- this._store.PurchaseFailedEvent += this.OnPurchaseFailed;
- this._store.PurchaseDeferredEvent += this.OnPurchaseDeferred;
- this.TryConsumingPurchases();
- this.InvokeRepeating(new Action(this.ValidatePurchases), 10f, 600f, true);
- }
-
- public void InitiatePurchase(CIG3StoreProduct product, Action purchaseCollectedCallback = null)
- {
- if (this._store == null)
- {
- UnityEngine.Debug.LogErrorFormat("Cannot initiate Purchase, PurchaseHandler was never initialized.", new object[0]);
- return;
- }
-
- //TODODO ¹ºÂòÖ±½Ó³É¹¦
- this._store.FirePurchaseSuccessEvent(product);
- return;
-
-
- if (this._store.LoadingError == IAPStoreError.None)
- {
- if (this._purchaseProductPopup == null)
- {
- this._purchaseProductPopup = SingletonMonobehaviour<PopupManager>.Instance.ShowOrUpdateGenericPopup(null, Localization.Key("please_wait"), Localization.Key("social_loading"), null, null, null, null, null, false);
- SingletonMonobehaviour<CIGSessionRestarter>.Instance.RegisterCriticalProcess(this);
- SingletonMonobehaviour<CIGGameStats>.Instance.AddIAPInitiated();
- this._purchaseCollectedCallback = purchaseCollectedCallback;
- this._store.InitiatePurchase(product);
- }
- else
- {
- UnityEngine.Debug.LogError("Purchase failed, Another purchase is still pending.");
- }
- }
- else
- {
- SingletonMonobehaviour<PopupManager>.Instance.ShowOrUpdateGenericPopup(null, Localization.Key("purchase.failed_title"), Localization.Format(Localization.Key("purchase.failed_desc"), new ILocalizedString[]
- {
- this.StoreLoadingError
- }), Localization.Key("ok"), null, null, null, null, true);
- }
- }
-
- private void ValidatePurchases()
- {
- this._store.ValidatePurchases();
- }
-
- private void TryConsumingPurchases()
- {
- CIG3StoreProduct[] unconsumedPurchases = this._store.UnconsumedPurchases;
- int num = unconsumedPurchases.Length;
- if (num == 0)
- {
- return;
- }
- if (SingletonMonobehaviour<PopupManager>.Instance.PopupIsOpen())
- {
- this.Invoke(new Action(this.TryConsumingPurchases), 60f, false);
- return;
- }
- for (int i = 0; i < num; i++)
- {
- this.ShowPurchaseSuccessPopup(unconsumedPurchases[i]);
- }
- }
-
- private void ShowPurchaseSuccessPopup(CIG3StoreProduct Product)
- {
- Action action = delegate ()
- {
- this.OnConsumeProduct(Product, SingletonMonobehaviour<CIGStoreManager>.Instance.IAPShopProductConsumer);
- };
- switch (Product.Category)
- {
- case StoreProductCategory.Shop:
- case StoreProductCategory.ShopSale:
- SingletonMonobehaviour<PopupManager>.Instance.ShowOrUpdateGenericPopup(null, Localization.Key("build_purchase_succeeded_title"), Localization.Format(Localization.Key("build_purchase_succeeded_message"), new ILocalizedString[]
- {
- Product.Currencies.LocalizedString()
- }), Localization.Key("ok"), null, action, null, action, true);
- break;
- case StoreProductCategory.Packs:
- SingletonMonobehaviour<PopupManager>.Instance.ShowOrUpdateGenericPopup(null, Localization.Key("build_purchase_succeeded_title"), Localization.Key("build_purchase_succeeded_title"), Localization.Key("ok"), null, action, null, action, true);
- break;
- case StoreProductCategory.Cranes:
- SingletonMonobehaviour<PopupManager>.Instance.ShowOrUpdateGenericPopup(null, Localization.Key("build_purchase_succeeded_title"), Localization.Format(Localization.Key("crane_purchased"), new ILocalizedString[]
- {
- Localization.Integer(SingletonMonobehaviour<CIGBuilderManager>.Instance.MaxBuildCount + 1)
- }), Localization.Key("ok"), null, action, null, action, true);
- break;
- default:
- break;
- }
- }
-
- private void OnConsumeProduct(CIG3StoreProduct Product, IProductConsumer productConsumer)
- {
- if (!productConsumer.ConsumeProduct(Product))
- {
- return;
- }
- this._store.MarkPurchaseAsConsumed(Product);
- SingletonMonobehaviour<CIGGameStats>.Instance.AddIAPPurchased();
- StorageController.SaveAll();
- productConsumer.FireProductConsumedEvent(Product);
- UnityEngine.Debug.Log("IAP handled, purchases marked as consumed.");
- if (this._purchaseCollectedCallback != null)
- {
- this._purchaseCollectedCallback();
- this._purchaseCollectedCallback = null;
- }
- }
-
- private void OnPurchaseSuccess(CIG3StoreProduct Product)
- {
- if (this._purchaseProductPopup != null)
- {
- this._purchaseProductPopup.ClosePopup(null, true, true);
- this._purchaseProductPopup = null;
- }
- this.ShowPurchaseSuccessPopup(Product);
- SingletonMonobehaviour<CIGSessionRestarter>.Instance.UnregisterCriticalProcess(this);
- }
-
- private void OnPurchaseFailed(CIG3StoreProduct product, IAPStorePurchaseFailedError error)
- {
- if (this._purchaseProductPopup != null)
- {
- this._purchaseProductPopup.ClosePopup(null, true, true);
- this._purchaseProductPopup = null;
- }
- ILocalizedString localizedString;
- switch (error)
- {
- case IAPStorePurchaseFailedError.StoreLoadingError:
- localizedString = this.StoreLoadingError;
- goto IL_CA;
- case IAPStorePurchaseFailedError.PurchasingUnavailable:
- localizedString = Localization.Key("purchase.failed_purchasing_unavailable");
- goto IL_CA;
- case IAPStorePurchaseFailedError.ExistingPurchasePending:
- localizedString = Localization.Key("purchase.failed_pending_purchase");
- goto IL_CA;
- case IAPStorePurchaseFailedError.ProductUnavailable:
- localizedString = Localization.Key("purchase.failed_product_unavailable");
- goto IL_CA;
- case IAPStorePurchaseFailedError.SignatureInvalid:
- localizedString = Localization.Key("purchase.failed_signature_invalid");
- goto IL_CA;
- case IAPStorePurchaseFailedError.UserCancelled:
- localizedString = Localization.Key("purchase.failed_user_cancelled");
- goto IL_CA;
- case IAPStorePurchaseFailedError.PaymentDeclined:
- localizedString = Localization.Key("purchase.failed_payment_declined");
- goto IL_CA;
- }
- localizedString = Localization.EmptyLocalizedString;
- IL_CA:
- if (product != null)
- {
- if (error == IAPStorePurchaseFailedError.StoreLoadingError)
- {
- }
- else
- {
- }
- }
- SingletonMonobehaviour<PopupManager>.Instance.ShowOrUpdateGenericPopup(null, Localization.Key("purchase.failed_title"), Localization.Format(Localization.Key("purchase.failed_desc"), new ILocalizedString[]
- {
- localizedString
- }), Localization.Key("ok"), null, null, null, null, true);
- SingletonMonobehaviour<CIGSessionRestarter>.Instance.UnregisterCriticalProcess(this);
- }
-
- private void OnPurchaseDeferred(CIG3StoreProduct product)
- {
- if (this._purchaseProductPopup != null)
- {
- this._purchaseProductPopup.ClosePopup(null, true, true);
- this._purchaseProductPopup = null;
- }
- SingletonMonobehaviour<CIGSessionRestarter>.Instance.UnregisterCriticalProcess(this);
- }
-
- private ILocalizedString StoreLoadingError
- {
- get
- {
- IAPStoreError loadingError = this._store.LoadingError;
- if (loadingError == IAPStoreError.PurchasingUnavailable)
- {
- return Localization.Key("purchase.failed_purchasing_unavailable");
- }
- if (loadingError != IAPStoreError.StoreInitializing)
- {
- return Localization.EmptyLocalizedString;
- }
- return Localization.Key("purchase.failed_internet_connection");
- }
- }
-
- private const float CONSUMPTION_RETRYTIME = 60f;
-
- private IAPStore<CIG3StoreProduct> _store;
-
- private GenericPopupState _purchaseProductPopup;
-
- private Action _purchaseCollectedCallback;
- }
- }
|