From decdb1251f6a37d85cab0ec616ba0d193d083fd5 Mon Sep 17 00:00:00 2001 From: Stephen Paul Weber Date: Mon, 2 Aug 2021 12:38:12 -0500 Subject: [PATCH] Command cancel rejects the promise So it won't be taken as next by naive code. --- sgx_jmp.rb | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/sgx_jmp.rb b/sgx_jmp.rb index 3fe777b177d788a51b1742cb5b330f81f17b6b50..fedc3164b52d0ad7e3ae8980edadec082ca86378 100644 --- a/sgx_jmp.rb +++ b/sgx_jmp.rb @@ -238,11 +238,12 @@ message :error? do |m| end class SessionManager - def initialize(blather, id_msg, timeout: 5) + def initialize(blather, id_msg, timeout: 5, error_if: nil) @blather = blather @sessions = {} @id_msg = id_msg @timeout = timeout + @error_if = error_if end def promise_for(stanza) @@ -264,7 +265,7 @@ class SessionManager def fulfill(stanza) id = "#{stanza.from.stripped}/#{stanza.public_send(@id_msg)}" - if stanza.error? + if stanza.error? || @error_if&.call(stanza) @sessions.delete(id)&.reject(stanza) else @sessions.delete(id)&.fulfill(stanza) @@ -273,7 +274,12 @@ class SessionManager end IQ_MANAGER = SessionManager.new(self, :id) -COMMAND_MANAGER = SessionManager.new(self, :sessionid, timeout: 60 * 60) +COMMAND_MANAGER = SessionManager.new( + self, + :sessionid, + timeout: 60 * 60, + error_if: ->(s) { s.cancel? } +) web_register_manager = WebRegisterManager.new disco_info to: Blather::JID.new(CONFIG[:component][:jid]) do |iq|