NET添加操作锁保证任务唯一,应用给部分操作
This commit is contained in:
@@ -1154,6 +1154,8 @@ do
|
|||||||
USER.id=res.id
|
USER.id=res.id
|
||||||
USER.authToken=res.authToken
|
USER.authToken=res.authToken
|
||||||
NET.getAccessToken()
|
NET.getAccessToken()
|
||||||
|
else
|
||||||
|
SCN.back()
|
||||||
end
|
end
|
||||||
FILE.save(USER,"conf/user","q")
|
FILE.save(USER,"conf/user","q")
|
||||||
LOG.print(text.loginSuccessed)
|
LOG.print(text.loginSuccessed)
|
||||||
@@ -1164,12 +1166,14 @@ do
|
|||||||
USER.accessToken=res.accessToken
|
USER.accessToken=res.accessToken
|
||||||
LOG.print(text.accessSuccessed)
|
LOG.print(text.accessSuccessed)
|
||||||
NET.wsConnectPlay()
|
NET.wsConnectPlay()
|
||||||
|
NET.unlock("accessToken")
|
||||||
elseif res.action==1 then--Get userInfo
|
elseif res.action==1 then--Get userInfo
|
||||||
if res.id==USER.id then--Own
|
if res.id==USER.id then--Own
|
||||||
USER.name=res.username
|
USER.name=res.username
|
||||||
USER.motto=res.motto
|
USER.motto=res.motto
|
||||||
USER.avatar=res.avatar
|
USER.avatar=res.avatar
|
||||||
FILE.save(USER,"conf/user")
|
FILE.save(USER,"conf/user")
|
||||||
|
NET.unlock("getSelfInfo")
|
||||||
else--Others
|
else--Others
|
||||||
LOG.print("Get user info: "..USER.id)
|
LOG.print("Get user info: "..USER.id)
|
||||||
end
|
end
|
||||||
@@ -1202,11 +1206,13 @@ do
|
|||||||
local res=JSON.decode(message)
|
local res=JSON.decode(message)
|
||||||
if res then
|
if res then
|
||||||
if res.message=="Connected"then
|
if res.message=="Connected"then
|
||||||
|
NET.unlock("connectPlay")
|
||||||
SCN.go("net_menu")
|
SCN.go("net_menu")
|
||||||
elseif res.action==0 then--Fetch rooms
|
elseif res.action==0 then--Fetch rooms
|
||||||
NET.roomList=res.roomList
|
NET.roomList=res.roomList
|
||||||
elseif res.action==2 then--Join room
|
elseif res.action==2 then--Join room
|
||||||
loadGame("netBattle",true,true)
|
loadGame("netBattle",true,true)
|
||||||
|
NET.unlock("enterRoom")
|
||||||
elseif res.action==3 then--Leave room
|
elseif res.action==3 then--Leave room
|
||||||
SCN.back()
|
SCN.back()
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -5,28 +5,48 @@ local NET={
|
|||||||
roomList=false,
|
roomList=false,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
--Lock & Unlock submodule
|
||||||
|
local locks={}
|
||||||
|
function NET.lock(name,T)
|
||||||
|
if locks[name]and TIME()<locks[name]then
|
||||||
|
return false
|
||||||
|
else
|
||||||
|
locks[name]=TIME()+(T or 1e99)
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
function NET.unlock(name)
|
||||||
|
locks[name]=false
|
||||||
|
end
|
||||||
|
|
||||||
--Account
|
--Account
|
||||||
function NET.pong(wsName,message)
|
function NET.pong(wsName,message)
|
||||||
WS.send(wsName,message,"pong")
|
WS.send(wsName,message,"pong")
|
||||||
end
|
end
|
||||||
function NET.getAccessToken()
|
function NET.getAccessToken()
|
||||||
WS.send("user",JSON.encode{action=0})
|
if NET.lock("accessToken")then
|
||||||
|
WS.send("user",JSON.encode{action=0})
|
||||||
|
end
|
||||||
end
|
end
|
||||||
function NET.getSelfInfo()
|
function NET.getSelfInfo()
|
||||||
WS.send("user",JSON.encode{
|
if NET.lock("getSelfInfo")then
|
||||||
action=1,
|
WS.send("user",JSON.encode{
|
||||||
data={
|
action=1,
|
||||||
id=USER.id,
|
data={
|
||||||
},
|
id=USER.id,
|
||||||
})
|
},
|
||||||
|
})
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
--Play
|
--Play
|
||||||
function NET.wsConnectPlay()
|
function NET.wsConnectPlay()
|
||||||
WS.connect("play","/play",JSON.encode{
|
if NET.lock("connectPlay")then
|
||||||
id=USER.id,
|
WS.connect("play","/play",JSON.encode{
|
||||||
accessToken=USER.accessToken,
|
id=USER.id,
|
||||||
})
|
accessToken=USER.accessToken,
|
||||||
|
})
|
||||||
|
end
|
||||||
end
|
end
|
||||||
function NET.signal_ready()
|
function NET.signal_ready()
|
||||||
WS.send("play","R")
|
WS.send("play","R")
|
||||||
@@ -56,7 +76,7 @@ function NET.createRoom()
|
|||||||
WS.send("play",JSON.encode{
|
WS.send("play",JSON.encode{
|
||||||
action=1,
|
action=1,
|
||||||
data={
|
data={
|
||||||
type=nil,
|
type="classic",
|
||||||
name=(USER.name or"???").."'s room",
|
name=(USER.name or"???").."'s room",
|
||||||
password=nil,
|
password=nil,
|
||||||
conf=dumpBasicConfig(),
|
conf=dumpBasicConfig(),
|
||||||
@@ -64,14 +84,16 @@ function NET.createRoom()
|
|||||||
})
|
})
|
||||||
end
|
end
|
||||||
function NET.enterRoom(roomID,password)
|
function NET.enterRoom(roomID,password)
|
||||||
WS.send("play","/play",JSON.encode{
|
if NET.lock("enterRoom")then
|
||||||
action=2,
|
WS.send("play","/play",JSON.encode{
|
||||||
data={
|
action=2,
|
||||||
rid=roomID,
|
data={
|
||||||
conf=dumpBasicConfig(),
|
rid=roomID,
|
||||||
password=password,
|
conf=dumpBasicConfig(),
|
||||||
}
|
password=password,
|
||||||
})
|
}
|
||||||
|
})
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
--Chat
|
--Chat
|
||||||
|
|||||||
Reference in New Issue
Block a user