Mon, 07 Sep 2015 14:33:09 +0100
client: Add full JID as property of clients
local async = require "scansion.async"; local verse = require "verse".init("client"); verse.set_log_handler(verse._default_log_handler, { "debug", "info", "warn", "error" }); local parse_xml = require "scansion.xml".parse; local stanza_timeout = 5; local stanzacmp = require "scansion.stanzacmp"; return { _validate = function (client) assert(client.jid, "No JID specified"); client.stream = verse.new(); client.stream:hook("stanza", function (stanza) print("Stanza:", stanza) end); -- This one prints all received data client.stream:hook("incoming-raw", print, 1000); client.stream:hook("outgoing-raw", print, 1000); end; connects = function (client) local wait, done = async.waiter(); client.stream:hook("ready", function () print"aha" done() end); client.stream:connect_client(client.jid, client.password); print("waiting") wait(); client.full_jid = client.stream.jid; end; sends = function (client, data) local stanza = parse_xml(table.concat(data)); client.stream:send(stanza); end; receives = function (client, data) local expected_stanza = parse_xml(table.concat(data)); local function stanza_handler(received_stanza) if not stanzacmp.stanzas_match(expected_stanza, received_stanza) then print("NOT IT!") verse.quit(); else print("YES!") end expected_stanza = nil; end client.stream:hook("stanza", stanza_handler, 100); verse.add_task(stanza_timeout, function () if not expected_stanza then return; end end); end; disconnects = function (client) end; }