local jid = 'wilson@ubq323.website' local server = 'ubq323.website' local auth = 'AHdpbHNvbgBncmVnb3J5PDM=' local resource = 'cheese' local cqueues = require'cqueues' local socket = require'cqueues.socket' local function connect() local sock = assert(socket.connect(server, 5222)) sock:setmode('bn','bn') local start = ([[ ]]):format(jid, server) -- state of the art xml parser local function check_and_send(test, text) local x = sock:read('-2048') print(x) if text then sock:write(text) end end sock:write(start) check_and_send('starttls', [[]]) check_and_send('proceed', nil) sock:starttls() sock:write(start) check_and_send('PLAIN', ([[%s]]):format(auth)) check_and_send('success',start) check_and_send('bind', ([[ %s ]]):format(resource)) check_and_send('jid','') return sock end local mucs = { 'ja@conference.ubq323.website', 'a@conference.ubq323.website', } local xml = require'xml' local pprint=require'pprint' local function run_xmpp() local sock = connect() for _, muc in ipairs(mucs) do sock:write(([[ ]]):format(muc .. '/wilson')) end for x in xml.stanzae(function() return sock:read('-2048') end) do -- pprint(x) local body = x'body' and x'body'[1] if x.label == 'message' then pprint('M', x.xarg.from, body) end end end local cq = cqueues.new() cq:wrap(run_xmpp) pprint(cq:loop())