/// <summary> /// /// </summary> /// <param name="stampSheet"></param> /// <param name="encryptionKeyId"></param> /// <returns></returns> public IEnumerator Run( string stampSheet, string encryptionKeyId, UnityEvent <Gs2Exception> onError ) { var stateMachine = new StampSheetStateMachine( stampSheet, _client, encryptionKeyId ); foreach (var handler in _onDoneStampTasks) { stateMachine.OnDoneStampTask.AddListener(handler); } foreach (var handler in _onCompleteStampSheets) { stateMachine.OnCompleteStampSheet.AddListener(handler); } yield return(stateMachine.Execute( onError )); }
/// <summary> /// スタミナを購入する /// </summary> /// <param name="callback"></param> /// <returns></returns> public IEnumerator Buy( UnityAction <AsyncResult <object> > callback ) { var request = Gs2Util.LoadGlobalGameObject <StaminaRequest>("StaminaRequest"); string stampSheet = null; { AsyncResult <EzExchangeResult> result = null; yield return(gs2Client.client.Exchange.Exchange( r => { result = r; }, request.gameSession, gs2StaminaSetting.exchangeNamespaceName, gs2StaminaSetting.exchangeRateName, 1, new List <Gs2.Unity.Gs2Exchange.Model.EzConfig> { new Gs2.Unity.Gs2Exchange.Model.EzConfig { Key = "slot", Value = MoneyController.Slot.ToString(), } } )); if (result.Error != null) { gs2StaminaSetting.onError.Invoke( result.Error ); callback.Invoke(new AsyncResult <object>(null, result.Error)); yield break; } stampSheet = result.Result.StampSheet; } { var machine = new StampSheetStateMachine( stampSheet, gs2Client.client, gs2StaminaSetting.distributorNamespaceName, gs2StaminaSetting.exchangeKeyId ); Gs2Exception exception = null; void OnError(Gs2Exception e) { exception = e; } gs2StaminaSetting.onError.AddListener(OnError); yield return(machine.Execute(gs2StaminaSetting.onError)); gs2StaminaSetting.onError.RemoveListener(OnError); if (exception != null) { callback.Invoke(new AsyncResult <object>(null, exception)); yield break; } } gs2StaminaSetting.onBuy.Invoke(); callback.Invoke(new AsyncResult <object>(null, null)); }