Sat, 05 Sep 2015 23:24:15 +0100
client: Implement send/receive, including new stanzacmp library
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(); end; connects = function (client) client.stream:connect_client(client.jid, client.password); 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; }