diff --git a/Zframework/task.lua b/Zframework/task.lua index 0ba89f1d..eb900da7 100644 --- a/Zframework/task.lua +++ b/Zframework/task.lua @@ -5,6 +5,7 @@ local tasks={} local TASK={ netTaskCount=0, + wsConnecting=false, } function TASK.getCount() return #tasks @@ -17,7 +18,10 @@ function TASK.update() if T.net then TASK.netTaskCount=TASK.netTaskCount-1 end - rem(tasks,i) + if T.ws then + TASK.wsConnecting=false + end + rem(tasks,i) end end end @@ -44,6 +48,20 @@ function TASK.newNet(code,...) } end end +function TASK.newWS(code,...) + TASK.wsConnecting=true + local thread=ct.create(code) + ct.resume(thread,...) + if ct.status(thread)~="dead"then + tasks[#tasks+1]={ + thread=thread, + code=code, + args={...}, + net=true, + ws=true, + } + end +end function TASK.removeTask_code(code) for i=#tasks,1,-1 do if tasks[i].code==code then diff --git a/Zframework/toolfunc.lua b/Zframework/toolfunc.lua index b41a25c3..84a08ff3 100644 --- a/Zframework/toolfunc.lua +++ b/Zframework/toolfunc.lua @@ -559,7 +559,7 @@ do--httpRequest & wsConnect end function wsConnect(tick,path,header) - if TASK.netTaskCount>0 then + if TASK.wsConnecting then LOG.print(text.waitNetTask,"message") return end @@ -569,7 +569,7 @@ do--httpRequest & wsConnect header=header, } if task then - TASK.newNet(tick,task) + TASK.newWS(tick,task) else LOG.print("NETlib error: "..err,"warn") end diff --git a/parts/scenes/net_rooms.lua b/parts/scenes/net_rooms.lua index 74e0e81f..e1a1eb32 100644 --- a/parts/scenes/net_rooms.lua +++ b/parts/scenes/net_rooms.lua @@ -28,7 +28,6 @@ local function task_enterRoom(task) end end local function enterRoom(roomID) - coroutine.yield() wsConnect( task_enterRoom, PATH.socket..PATH.onlinePlay.. @@ -72,7 +71,7 @@ local function task_createRoom(task) local res=json.decode(response.body) if response.code==200 and res.message=="OK"then LOG.print(text.createRoomSuccessed) - TASK.newNet(enterRoom,res.room.id) + enterRoom(res.room.id) else LOG.print(text.httpCode..response.code..": "..res.message,"warn") end