add gs
This commit is contained in:
@@ -0,0 +1,48 @@
|
||||
local function CreateCacheData(data, version, getRefreshIntervalFunc, refreshFunc)
|
||||
local this = {}
|
||||
this.Data = data
|
||||
this.Version = version
|
||||
this.GetRefreshIntervalFunc = getRefreshIntervalFunc
|
||||
this.RefreshFunc = refreshFunc
|
||||
local refreshDebounce = false
|
||||
|
||||
--Use new data to update, usually we do this at intervals in BG
|
||||
function this:Update(newCached)
|
||||
if newCached and newCached.Version then
|
||||
if self.Version <= newCached.Version then
|
||||
self.Version = newCached.Version
|
||||
self.Data = newCached.Data
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
--Refresh the data, usually we will call the Refresh when some data is required
|
||||
function this:Refresh(forceRefresh)
|
||||
if self.RefreshFunc and type(self.RefreshFunc) == 'function' then
|
||||
while refreshDebounce do
|
||||
wait()
|
||||
end
|
||||
|
||||
--Get RefreshInterval
|
||||
local RefreshInterval = nil
|
||||
if self.GetRefreshIntervalFunc and type(self.GetRefreshIntervalFunc) == 'function' then
|
||||
RefreshInterval = tonumber(self.GetRefreshIntervalFunc())
|
||||
end
|
||||
|
||||
if forceRefresh or not self.Version or not RefreshInterval or (tick() - self.Version >= RefreshInterval) then
|
||||
refreshDebounce = true
|
||||
--RefreshFunc will update data, and return whether the refresh was valid
|
||||
if self.RefreshFunc(self.Data) then
|
||||
self.Version = tick()
|
||||
else --this refresh fails, we needs to reset Version to ensure next RefreshFunc call
|
||||
self.Version = nil
|
||||
end
|
||||
refreshDebounce = false
|
||||
end
|
||||
end
|
||||
end
|
||||
return this
|
||||
end
|
||||
|
||||
|
||||
return CreateCacheData
|
||||
Reference in New Issue
Block a user