# frozen_string_literal: true require "blather/client/dsl" require "timeout" module BlatherNotify extend Blather::DSL @ready = Queue.new when_ready { @ready << :ready } def self.start(jid, password) # workqueue_count MUST be 0 or else Blather uses threads! setup(jid, password, nil, nil, nil, nil, workqueue_count: 0) EM.error_handler { |e| warn e.message } @thread = Thread.new do EM.run do client.run end end Timeout.timeout(30) { @ready.pop } at_exit { wait_then_exit } end def self.wait_then_exit disconnected { EM.stop } EM.add_timer(30) { EM.stop } shutdown @thread.join end end