Mon, 07 Sep 2015 14:33:47 +0100
client: Some logging changes
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"; local function fill_vars(script, stanza) for k, v in pairs(stanza.attr) do print("attr", k) local expr = v:match("^%$%{(.+)%}$"); if expr then local name, value_name = expr:match("^(.-)'s (.+)$"); assert(name, "Unable to parse expression: "..expr); print("BBB") local key = value_name:lower():gsub(" ", "_"); assert(script.objects[name], "Unknown object called "..name); local value = script.objects[name][key]; assert(value ~= nil, "Unknown attribute (of "..name.."): "..value_name); stanza.attr[k] = value; end end return stanza; end 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); wait(); client.full_jid = client.stream.jid; end; sends = function (client, data) local stanza = fill_vars(client.script, parse_xml(table.concat(data))); client.stream:send(stanza); end; receives = function (client, data) local expected_stanza = fill_vars(client.script, 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 print("TIMEOUT") end); end; disconnects = function (client) end; }