2025-06-04 05:02:57 +08:00

65 lines
1.7 KiB
Plaintext

autoImport ("WWWRequest")
WWWRequestManager = class("WWWRequestManager")
local tableRemove = table.remove
local ArrayPopFront = TableUtility.ArrayPopFront
function WWWRequestManager:ctor()
self.count = 10
self.requests = {}
self.waiting = {}
end
function WWWRequestManager:_InternalRequest( url,overtime,successCall,failedCall,overtimeCall )
local request = WWWRequest.CreateAsTable()
request:SetUrl(url)
request:SetOverTime(overtime)
request:SetCallBacks(successCall,failedCall,overtimeCall)
if(#self.requests >= self.count) then
self.waiting[#self.waiting + 1] = request
else
self:_AddToRequestAndStart(request)
end
end
function WWWRequestManager:_AddToRequestAndStart(request)
if(request) then
self.requests[#self.requests + 1] = request
request:Request()
end
end
function WWWRequestManager:_RemoveRequestIndex(index)
if(index>0 and index<=#self.requests) then
local request = tableRemove(self.requests, index)
request:Destroy()
end
end
--overtime 秒
function WWWRequestManager:SimpleRequest(url,overtime,successCall,failedCall,overtimeCall)
self:_InternalRequest(url,overtime,successCall,failedCall,overtimeCall)
end
function WWWRequestManager:Update(time, deltaTime)
local request
for i=#self.requests,1,-1 do
request = self.requests[i]
if(request:IsRequesting()) then
if(request:Update(time, deltaTime)==false) then
self:_RemoveRequestIndex(i)
end
elseif(request:CanRemove()) then
self:_RemoveRequestIndex(i)
end
end
local freeSeats = self.count - #self.requests
if(freeSeats>0) then
freeSeats = math.min(freeSeats,#self.waiting)
for i=1,freeSeats do
request = ArrayPopFront(self.waiting)
if(request) then
self:_AddToRequestAndStart(request)
end
end
end
end