diff --git a/Zframework/init.lua b/Zframework/init.lua index 924688c0..bf2d66fc 100644 --- a/Zframework/init.lua +++ b/Zframework/init.lua @@ -511,6 +511,7 @@ function love.run() if SCN.swapping then SCN.swapUpdate()end--Scene swapping animation WIDGET.update()--Widgets animation LOG.update() + WS.update() --DRAW if not MINI()then @@ -556,27 +557,6 @@ function love.run() _.draw(_.time) end - --Draw network working status - gc_push("transform") - gc.translate(SCR.w,0) - gc.scale(SCR.k) - for i=1,5 do - local status=WS.status(WSnames[i]) - gc_setColor(WScolor[i]) - gc_rectangle("fill",0,20*i,-20,-20) - if status=="dead"then - gc_setColor(.8,.8,.8) - gc_draw(TEXTURE.ws_dead,-20,20*i-20) - elseif status=="connecting"then - gc_setColor(.8,.8,.8,.5+.3*sin(t*6.26)) - gc_draw(TEXTURE.ws_connecting,-20,20*i-20) - elseif status=="running"then - gc_setColor(.8,.8,.8) - gc_draw(TEXTURE.ws_running,-20,20*i-20) - end - end - gc_pop() - --Draw FPS gc_setColor(1,1,1) setFont(15) @@ -585,17 +565,43 @@ function love.run() --Debug info. if devMode then + --Left-down infos gc_setColor(devColor[devMode]) gc_print("MEM "..gcinfo(),SCR.safeX+5,_-40) gc_print("Lines "..FREEROW.getCount(),SCR.safeX+5,_-60) gc_print("Cursor "..int(mx+.5).." "..int(my+.5),SCR.safeX+5,_-80) gc_print("Voices "..VOC.getQueueCount(),SCR.safeX+5,_-100) gc_print("Tasks "..TASK.getCount(),SCR.safeX+5,_-120) + + --Update & draw frame time ins(frameTimeList,1,dt)rem(frameTimeList,126) gc_setColor(1,1,1,.3) for i=1,#frameTimeList do gc_rectangle("fill",150+2*i,_-20,2,-frameTimeList[i]*4000) end + + --Websocket status + gc_push("transform") + gc.translate(SCR.w,0) + gc.scale(SCR.k) + for i=1,5 do + local status=WS.status(WSnames[i]) + gc_setColor(WScolor[i]) + gc_rectangle("fill",0,20*i,-20,-20) + if status=="dead"then + gc_setColor(.8,.8,.8) + gc_draw(TEXTURE.ws_dead,-20,20*i-20) + elseif status=="connecting"then + gc_setColor(.8,.8,.8,.5+.3*sin(t*6.26)) + gc_draw(TEXTURE.ws_connecting,-20,20*i-20) + elseif status=="running"then + gc_setColor(.8,.8,.8) + gc_draw(TEXTURE.ws_running,-20,20*i-20) + end + end + gc_pop() + + --Slow devmode if devMode==3 then WAIT(.1) elseif devMode==4 then WAIT(.5) end diff --git a/Zframework/websocket.lua b/Zframework/websocket.lua index 337ce287..594adeec 100644 --- a/Zframework/websocket.lua +++ b/Zframework/websocket.lua @@ -72,18 +72,19 @@ do--Connect --First line of HTTP local l=SOCK:receive("*l") - local code=l:find(" "); code=l:sub(code+1,code+3) - - if code=="101"then - readCHN:push("success") - else - local ctLen + local code,ctLen + if l then + code=l:find(" "); code=l:sub(code+1,code+3) repeat l=SOCK:receive("*l") if not ctLen and l:find"Length"then ctLen=tonumber(l:match"%d+") end until l=="" + end + if code=="101"then + readCHN:push("success") + else local reason=JSON.decode(SOCK:receive(ctLen)) readCHN:push(code..":"..(reason and reason.message or"Server Error")) end @@ -222,7 +223,7 @@ function WS.update() ws.lastPongTime=time else ws.status="dead" - LOG.print(text.wsFailed,"warn") + LOG.print(text.wsFailed.." "..mes,"warn") end end elseif time-ws.lastPingTime>ws.pingInterval then diff --git a/main.lua b/main.lua index 47ba5950..d0ac8f48 100644 --- a/main.lua +++ b/main.lua @@ -26,7 +26,7 @@ DAILYLAUNCH=false LOGIN=false EDITING="" WSCONN=false -LATEST_VERSION=false +ALLOW_ONLINE=false ERRDATA={} --System setting diff --git a/parts/gametoolfunc.lua b/parts/gametoolfunc.lua index f7698d02..faa0ce0e 100644 --- a/parts/gametoolfunc.lua +++ b/parts/gametoolfunc.lua @@ -1066,19 +1066,6 @@ end --Network funcs do --[[ - launch: - local res=JSON.decode(res.body) - if res.message=="OK"then - LOG.print(res.notice,360,COLOR.sky) - if VERSION_CODE>=res.version_code then - LATEST_VERSION=true - else - LOG.print(string.gsub(text.oldVersion,"$1",res.version_name),"warn") - end - else - LOG.print(text.httpCode..res.code..": "..res.message,"warn") - end - register: if response.message=="OK"then LOGIN=true @@ -1092,95 +1079,6 @@ do LOG.print(text.httpCode..response.code..": "..res.message,"warn") end - autoLogin: - if res.message=="OK"then - LOGIN=true - LOG.print(text.loginSuccessed) - httpRequest( - TICK_httpREQ_getUserInfo, - PATH.http..PATH.user, - "GET", - {["Content-Type"]="application/json"}, - JSON.encode{ - email=USER.email, - authToken=USER.authToken, - } - ) - else - LOGIN=false - LOG.print(text.loginFailed..": "..text.httpCode..res.code.."-"..res.message,"warn") - end - return - - newLogin: - if res.message=="OK"then - LOGIN=true - USER.email=res.email - USER.authToken=res.authToken - USER.id=res.id - FILE.save(USER,"conf/user","q") - LOG.print(text.loginSuccessed) - - --TODO:getUserInfo - JSON.encode{ - email=USER.email, - authToken=USER.authToken, - } - - --TODO:getAccessToken - JSON.encode{ - email=USER.email, - authToken=USER.authToken, - } - else - LOG.print(text.httpCode..res.code..": "..res.message,"warn") - end - - manualAutoLogin: - if res.message=="OK"then - LOG.print(text.accessSuccessed) - SCN.go("net_menu") - elseif res.code==403 or res.code==401 then - httpRequest( - TICK_httpREQ_getAccessToken, - PATH.http..PATH.access, - "POST", - {["Content-Type"]="application/json"}, - JSON.encode{ - email=USER.email, - authToken=USER.authToken, - } - ) - else - local err=JSON.decode(res.body) - if err then - LOG.print(text.httpCode..res.code..": "..err.message,"warn") - end - end - - getAccessToken: - if res.message=="OK"then - LOG.print(text.accessSuccessed) - USER.accessToken=res.accessToken - FILE.save(USER,"conf/user") - SCN.swapTo("net_menu") - else - LOGIN=false - USER.accessToken=false - USER.authToken=false - LOG.print(text.loginFailed..": "..text.httpCode..response.code.."-"..res.message,"warn") - end - - getUserInfo: - if res.message=="OK"then - USER.name=res.username - USER.motto=res.motto - USER.avatar=res.avatar - FILE.save(USER,"conf/user") - else - LOG.print("Get user info failed: "..text.httpCode..response.code.."-"..res.message,"warn") - end - goChatRoom: if res.message=="OK"then SCN.go("net_chat") @@ -1204,7 +1102,6 @@ do LOG.print(text.httpCode..res.code..": "..res.message,"warn") end - enterRoom: if res.message=="OK"then loadGame("netBattle",true,true) @@ -1215,6 +1112,7 @@ do ]] function TICK_WS_app() + local retryTime=5 while true do YIELD() local status=WS.status("app") @@ -1223,20 +1121,76 @@ do if message then if op=="ping"then WS.send("app",message,"pong") - --TODO: ping animation - --TODO: what to do with res? elseif op=="close"then - LOG.print(text.wsClose..message,"warn") + message=JSON.decode(message) + if message then + LOG.print(text.wsClose..message.message,"warn") + end return else - message=JSON.decode(message) + local res=JSON.decode(message) + if VERSION_CODE>=res.lowest then + ALLOW_ONLINE=true + end + if VERSION_CODE