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

139 lines
2.9 KiB
Plaintext

WWWRequest = reusableClass("WWWRequest")
WWWRequest.PoolSize = 15
local MaxOverTime = 15
local WWWRequestState = {
NONE = 0,
REQUESTING = 1,
SUCCESS = 2,
ERROR = 3,
OVERTIME = 4
}
function WWWRequest:ctor()
self:Reset()
end
function WWWRequest:Reset()
self.overtime = 0
self.overtimeStamp = 0
self.url = nil
self.wwwForm = nil
self.requestHead = nil
self.responseHead = nil
self.www = nil
--state
self.state = WWWRequestState.NONE
--callback
self.onSuccessResponseCall = nil
self.onFailedResponseCall = nil
self.onOvertimeCall = nil
end
function WWWRequest:_DisposeWWW()
if(self.www) then
self.www:Dispose()
self.www = nil
end
end
function WWWRequest:SetUrl( url )
if(self.state == WWWRequestState.NONE) then
self.url = url
else
helplog("request is already begin/end, cannot change url")
end
end
function WWWRequest:SetOverTime( overtime )
if(self.state == WWWRequestState.NONE) then
overtime = overtime or MaxOverTime
overtime = math.min(overtime,MaxOverTime)
self.overtime = overtime
else
helplog("request is already begin/end, cannot change overtime")
end
end
function WWWRequest:SetCallBacks( successCall,failedCall,overtimeCall )
if(self.state <= WWWRequestState.REQUESTING) then
self.onSuccessResponseCall = successCall
self.onFailedResponseCall = failedCall
self.onOvertimeCall = overtimeCall
else
helplog("request is already end, cannot change callbacks")
end
end
function WWWRequest:Request(url,overtime)
if(self.state ~= WWWRequestState.NONE) then
return
end
if (url) then
self:SetUrl(url)
end
if (overtime) then
self:SetOverTime(overtime)
end
self.state = WWWRequestState.REQUESTING
local c = coroutine.create(function ()
self.www = WWW(self.url)
self.overtimeStamp = Time.unscaledTime + self.overtime
Yield(self.www)
if(self.state == WWWRequestState.REQUESTING) then
if(self.www.isDone) then
if(self.www.error == nil or self.www.error == "") then
self.state = WWWRequestState.SUCCESS
if(self.onSuccessResponseCall) then
self.onSuccessResponseCall(self.www)
end
else
self.state = WWWRequestState.ERROR
if(self.onFailedResponseCall) then
self.onFailedResponseCall(self.www,self.www.error)
end
end
else
helplog("www is not done ??")
end
end
end)
coroutine.resume(c)
end
function WWWRequest:CanRemove()
return self.state >= WWWRequestState.SUCCESS
end
function WWWRequest:IsRequesting()
return self.state == WWWRequestState.REQUESTING
end
function WWWRequest:DoConstruct(asArray, data)
if(data) then
self.url = data.url
self.overtime = data.overtime
end
end
function WWWRequest:DoDeconstruct(asArray)
self:Reset()
end
function WWWRequest:Update(time, deltaTime)
if(Time.unscaledTime>=self.overtimeStamp) then
--超時
self.state = WWWRequestState.OVERTIME
if(self.onOvertimeCall) then
self.onOvertimeCall(self.www)
end
return false
end
return true
end