From 9f5151c54cfc399920b962d5ac804fae987bd327 Mon Sep 17 00:00:00 2001 From: tech Date: Fri, 27 Mar 2026 12:29:31 +0800 Subject: [PATCH] [U] sync with ft --- .../tysdk/Runtime/TYSDKCallbackManager.cs | 43 +++++++++++++++++++ .../Packages/tysdk/Runtime/TYSdkFacade_Pay.cs | 21 ++++++++- 2 files changed, 63 insertions(+), 1 deletion(-) diff --git a/sdk-intergration/Packages/tysdk/Runtime/TYSDKCallbackManager.cs b/sdk-intergration/Packages/tysdk/Runtime/TYSDKCallbackManager.cs index 80c948e..0e82232 100644 --- a/sdk-intergration/Packages/tysdk/Runtime/TYSDKCallbackManager.cs +++ b/sdk-intergration/Packages/tysdk/Runtime/TYSDKCallbackManager.cs @@ -71,6 +71,49 @@ namespace tysdk return tcs.Task; } + /// + /// 重置已注册 callback 的超时时间:取消先前安排的延时 , + /// 并从当前时刻起在 后触发取消(与构造时传入的延时等价,见 )。 + /// + /// Callback 数据类型 + /// 新的超时时间;若需立即按超时处理可使用 + /// 找到未完成 pending 并成功重置则为 true + public bool ResetCallbackTimeout(TimeSpan newTimeout) where T : class + { + if (_disposed) + throw new ObjectDisposedException(nameof(TYSDKCallbackManager)); + + var callbackId = typeof(T).Name; + + if (!_callbacks.TryGetValue(callbackId, out var entry)) + { + UnityEngine.Debug.LogWarning($"[TYSDKCallbackManager] No pending callback found for type: {callbackId}"); + return false; + } + + if (entry.Task.IsCompleted) + { + UnityEngine.Debug.LogWarning($"[TYSDKCallbackManager] Callback {callbackId} already completed, cannot reset timeout"); + return false; + } + + var cts = entry.CancellationTokenSource; + if (cts == null) + return false; + + try + { + cts.CancelAfter(newTimeout); + UnityEngine.Debug.Log($"[TYSDKCallbackManager] Reset timeout for {callbackId} to {newTimeout.TotalSeconds}s"); + return true; + } + catch (ObjectDisposedException) + { + UnityEngine.Debug.LogWarning($"[TYSDKCallbackManager] CancellationTokenSource already disposed for {callbackId}"); + return false; + } + } + /// /// 触发callback /// diff --git a/sdk-intergration/Packages/tysdk/Runtime/TYSdkFacade_Pay.cs b/sdk-intergration/Packages/tysdk/Runtime/TYSdkFacade_Pay.cs index 895a370..3e14a70 100644 --- a/sdk-intergration/Packages/tysdk/Runtime/TYSdkFacade_Pay.cs +++ b/sdk-intergration/Packages/tysdk/Runtime/TYSdkFacade_Pay.cs @@ -20,6 +20,8 @@ namespace tysdk |___/ =================================================*/ + private bool _payFirstNegativeHandled; + //public async Task Pay(string prodId, string prodPrice, string prodName, int count, string pType, string price_amount_micros =null) public async Task Pay(SKUDetail prod, int count, float usdprice, JObject purchaseInfo) { @@ -76,6 +78,10 @@ namespace tysdk Debug.LogWarning($"[TYSdkFacade::Pay] Faild {e.Message}"); return new PaymentInfo(){code = "-1"}; } + finally + { + _payFirstNegativeHandled = false; + } #elif UNITY_IOS @@ -95,6 +101,10 @@ namespace tysdk Debug.LogWarning($"[TYSdkFacade::Pay] Faild {e.Message}"); return new PaymentInfo(){code = "-1"}; } + finally + { + _payFirstNegativeHandled = false; + } #endif } @@ -108,7 +118,16 @@ namespace tysdk result.msg = jresult["errStr"].ToString(); if(result.code == "-1") { - Debug.Log("[TYSdkFacade] pay failed: waiting next pay callback"); + if (!_payFirstNegativeHandled) + { + _payFirstNegativeHandled = true; + TYSDKCallbackManager.Instance.ResetCallbackTimeout(TimeSpan.FromSeconds(5)); + Debug.Log("[TYSdkFacade] pay failed (first time): reset timeout to 5s, waiting next pay callback"); + } + else + { + Debug.Log("[TYSdkFacade] pay failed: waiting next pay callback"); + } return; } TYSDKCallbackManager.Instance.TryTriggerCallback(result);