PGRData/Script/matrix/xcommon/XNetworkCallCd.lua

71 lines
2.1 KiB
Lua
Raw Normal View History

2024-09-01 20:49:41 +00:00
---@class XNetworkCallCd 带CD的请求
---@field _Request string 协议名
---@field _Cd number 冷却时间
---@field _LastCall number 上次请求时间
local XNetworkCallCd = XClass(nil, "XNetworkCallCd")
function XNetworkCallCd:Ctor(request, cd)
self._Request = request
self._Cd = cd or 0
self._LastCall = 0
self._GetTipFunc = nil
end
--- 请求
---@param req table 请求的数据
---@param responseCb function 协议成功返回回调
---@param cb function 协议成功返回在responseCb之后执行或者在Cd未结束执行可屏蔽不执行
---@param errorCb function 协议失败执行
---@param ignoreTip boolean Cd未结束是否弹提示
---@param ignoreWaitCb boolean Cd未结束是否执行cb
---@return void
--------------------------
function XNetworkCallCd:Call(req, responseCb, cb, errorCb, ignoreTip, ignoreWaitCb)
--由于XNetwork是在Update里进行更新 这里保持同步
local timeOfNow = CS.UnityEngine.Time.time
local subSecond = timeOfNow - self._LastCall
--Cd时间未到
if subSecond < self._Cd then
if not ignoreTip then
local leftCd = math.ceil(math.max(0, self._Cd - subSecond))
XUiManager.TipMsg(self:GetNotCdTip(leftCd))
end
if cb and not ignoreWaitCb then cb() end
return
end
XNetwork.Call(self._Request, req, function(res)
if res.Code ~= XCode.Success then
XUiManager.TipCode(res.Code)
if errorCb then errorCb(res) end
return
end
self._LastCall = timeOfNow
if responseCb then responseCb(res) end
if cb then cb() end
end)
end
--- 重置上次请求时间
--------------------------
function XNetworkCallCd:ResetLastCall()
self._LastCall = 0
end
-- 修改提示内容可以设置回调
function XNetworkCallCd:GetNotCdTip(leftCd)
if self._GetTipFunc then
self._GetTipFunc(leftCd)
return
end
return XUiHelper.GetText("RequestFrequentlyText", tostring(leftCd))
end
function XNetworkCallCd:SetNotCdTipCb(func)
self._GetTipFunc = func
end
return XNetworkCallCd