Software /
code /
verse
Diff
plugins/smacks.lua @ 350:04049524fcd1
plugins.smacks: Improve logic for sending <r/>
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Wed, 27 Aug 2014 10:30:38 +0100 |
parent | 326:f657ed8f464e |
child | 380:0891b4e27766 |
line wrap: on
line diff
--- a/plugins/smacks.lua Wed Aug 27 10:30:08 2014 +0100 +++ b/plugins/smacks.lua Wed Aug 27 10:30:38 2014 +0100 @@ -1,4 +1,5 @@ local verse = require "verse"; +local now = socket.gettime; local xmlns_sm = "urn:xmpp:sm:2"; @@ -6,6 +7,8 @@ -- State for outgoing stanzas local outgoing_queue = {}; local last_ack = 0; + local last_stanza_time = now(); + local timer_active; -- State for incoming stanzas local handled_stanza_count = 0; @@ -24,11 +27,24 @@ if stanza.name and not stanza.attr.xmlns then -- serialize stanzas in order to bypass this on resumption outgoing_queue[#outgoing_queue+1] = tostring(stanza); - verse.add_task(1, function() - if #outgoing_queue > 0 then + last_stanza_time = now(); + if not timer_active then + timer_active = true; + stream:debug("Waiting to send ack request..."); + verse.add_task(1, function() + if #outgoing_queue == 0 then + timer_active = false; + return; + end + local time_since_last_stanza = now() - last_stanza_time; + if time_since_last_stanza < 1 and #outgoing_queue < 10 then + return 1 - time_since_last_stanza; + end + stream:debug("Time up, sending <r>..."); + timer_active = false; stream:send(verse.stanza("r", { xmlns = xmlns_sm })); - end - end); + end); + end end end