corona提供的network模块提供了简单的文件下载及访问http请求的功能,但是在处理并发方面经常会出现一些意料之外的bug.所以我自己封装了一个模块,对所有的通信请求放在一个队列里,然后设置一个timer进行集中处理。
======================================================================================================
代码如下(netHandle.lua):
======================================================================================================
module(..., package.seeall)
local network = require("network")
--隊列
local nList = {}
local stat = 0
local function request(params)
local cmd = params.cmd
local key = params.key
local paras = params.params
local listener = params.listener
local server = params.server or SURL
local p = {}
local data = ""
for i = 1, #paras do
if string.len(data) == 0 then
data = paras[i]
else
data = data .. "\n" .. paras[i]
end
end
p.body = "cmd=" .. cmd .. "&key=" .. key .. "&data=" .. data
print(p.body)
local function l( event )
listener(event)
stat = 0
end
stat = 1
network.request(server, "POST", l, p)
end
local function download( params )
local cmd = params.cmd
local key = params.key
local paras = params.params
local listener = params.listener
local filename = params.filename
local path = params.path
local server = params.server or SURL
local p = {}
local data = ""
for i = 1, #paras do
if string.len(data) == 0 then
data = paras[i]
else
data = data .. "\n" .. paras[i]
end
end
p.body = "cmd=" .. cmd .. "&key=" .. key .. "&data=" .. data
print(p.body, filename, path)
local function l(event)
listener(event)
stat = 0
end
stat = 1
network.download(server, "POST", l, p, filename, path)
end
function doWork()
if stat == 0 then
if #nList > 0 then
local params = nList[1]
if params.filename then
--download
download(params)
else
--req
request(params)
end
table.remove(nList, 1)
end
end
end
function addWork( params )
nList[#nList+1] = params
end
接口说明:
function addWork( params )--添加网络请求
function doWork() --处理网络请求,放置在timer里进行处理
======================================================================================================
处理代码(main.lua):
======================================================================================================
调用代码(*.lua):