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|