65 lines
1.7 KiB
Plaintext
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 |