139 lines
2.9 KiB
Plaintext
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 |