(edit) Rewritten for latest commit, and echoes added to track event flow
(edit) tempTimer restored
players = players or {}
-- This function is called to start the script running
function start()
echo("Starting script...\n")
registerAnonymousEventHandler("sysInterProfileEvent", "interProfileEvent")
players[getProfileName()] = true
sendHello()
end
function interProfileEvent(a,b, eventString)
local event=yajl.to_value(eventString)
local action=event.action
local sender=event.sender
local fname="receive" .. event.action
echo("Received: " .. event.action .. " From: " .. event.sender .. "\n")
if _G[fname] ~= nil then
_G[fname](event)
else
echo("invalid functionname: ".. fname .. "\n")
end
end
function sendHello()
local event={["action"]="Hello",
["sender"]=getProfileName()}
echo("Sending: " .. event.action .. " From: " .. event.sender .. "\n")
sendGlobalEvent( yajl.to_string(event) )
end
function sendHi(event)
local event={["action"]="Hi",
["sender"]=getProfileName()}
echo("Sending: " .. event.action .. " From: " .. event.sender .. "\n")
sendGlobalEvent( yajl.to_string(event) )
end
function receiveHello(event)
if event.sender ~= getProfileName() then
echo("A new player has just joined or reconnected: " .. event.sender .. "\n")
players[event.sender] = true
-- send hi response
tempTimer(0, [[sendHi()]])
echo("Player list:\n")
display(players)
else
echo("Discarding Hello from self\n")
if table.size(players) == 1 then
echo("Currently single player only.\n")
end
end
end
function receiveHi(event)
players[event.sender] = true
display(players)
echo("Total number of players: " .. table.size(players) .. "\n")
-- initiate desired test if 3 players joined
if table.size(players) == 3 and not testrun then
testrun=true
if failedtest then
echo("I already failed to be first before I even started!\n")
else
echo("3 players have now joined. Initiating demonstration.\n")
echo("Only one (the first to attempt) profile will be able to perform the next action.\n")
tempTimer(0, [[sendTest()]])
end
end
end
function sendTest(event)
local event={["action"]="Test",
["sender"]=getProfileName()}
echo("Sending: " .. event.action .. " From: " .. event.sender .. "\n")
sendGlobalEvent( yajl.to_string(event) )
end
function receiveTest(event)
if event.sender == getProfileName() and not failedtest then
echo("I can perform the action!\n")
success=true
else
if not success and not failedtest then
echo("Someone else is performing this event before me. I failed.\n")
failedtest=true
end
end
end