-- -- Copyright (c) 2011 Remko Tronçon -- Licensed under the GNU General Public License v3. -- See Documentation/Licenses/GPLv3.txt for more information. -- -- This script creates the wonderland world example. -- require "sluift" sluift.debug = true characters = { ["Alice"] = { jid = "alice@wonderland.lit", groups = {}, presence = "" }, ["Mad Hatter"] = { jid = "hatter@wonderland.lit", groups = {}, presence = "awayAt the Tea Party" }, ["Queen of Hearts"] = { jid ="queen@wonderland.lit", groups = {}, presence = "dndExecuting" }, ["White Rabbit"] = { jid = "rabbit@wonderland.lit", groups = {"Animals"}, presence = "Oh dear!"}, ["Mock Turtle"] = { jid = "turtle@wonderland.lit", groups = {"Animals"}, presence = "" }, } for name, character in pairs(characters) do print("Connecting " .. name .. "...") local client = sluift.new_client(character.jid, os.getenv("SLUIFT_PASS")) client:set_options({compress = false, tls = false}) client:connect() client:get_contacts() client:send(character.presence) for contact_name, contact in pairs(characters) do if contact.jid ~= character.jid then client:add_contact(contact) end end character.client = client end print("Confirming subscriptions") for _, character in pairs(characters) do for _, contact in pairs(characters) do character.client:confirm_subscription(contact.jid) end end print("Setting up PubSub nodes") local hatters_riddles = characters["Mad Hatter"].client:pubsub("pubsub.wonderland.lit"):node("hatters_riddles") hatters_riddles:delete() assert(hatters_riddles:create()) local queen_quotes = characters["Queen of Hearts"].client:pubsub("pubsub.wonderland.lit"):node("queen_quotes") queen_quotes:delete() assert(queen_quotes:create()) queen_quotes:publish{id = 'quote1', item = {_type = 'body', text = 'Off with his head!'}} queen_quotes:publish{id = 'quote2', item = {_type = 'body', text = 'Off with her head!'}} queen_quotes:publish{id = 'quote3', item = {_type = 'body', text = 'Off with their heads!'}} characters['Mad Hatter'].client:pubsub():node('http://jabber.org/protocol/geoloc'):publish{ item = {_type = 'user_location', latitude = 50.376739, longitude = -4.200709}} characters['Queen of Hearts'].client:pubsub():node('http://jabber.org/protocol/geoloc'):publish{ item = {_type = 'user_location', latitude = 50.551123, longitude = -4.141654}} characters['Mock Turtle'].client:pubsub():node('http://jabber.org/protocol/geoloc'):publish{ item = {_type = 'user_location', latitude = 50.366630, longitude = -4.134518}} characters['White Rabbit'].client:pubsub():node('http://jabber.org/protocol/geoloc'):publish{ item = {_type = 'user_location', latitude = 50.332907, longitude = -4.759194}} print("Disconnecting alice") characters['Alice'].client:disconnect() print("Done. Waiting ...") while true do for name, character in pairs(characters) do if name == 'Queen of Hearts' then for message in character.client:messages{timeout = 1000} do if message.body == 'publish' then queen_quotes:publish{item = {_type = 'body', text = 'Off with her head!'}} queen_quotes:publish{item = {_type = 'body', text = 'Off with his head!'}} else character.client:send_message{to = e["from"], body = "Off with their heads!"} end end elseif name == "Mad Hatter" then for message in character.client:messages{timeout = 1000} do if message.body == 'publish' then hatters_riddles:publish{item = {_type = 'body', text = 'Why is a raven like a writing desk?'}} end end else for message in character.client:messages{timeout = 100} do end end end end