# 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(&method(:panic))
@thread = Thread.new do
EM.run do
client.run
end
end
Timeout.timeout(30) { @ready.pop }
at_exit { wait_then_exit }
end
def self.panic(e)
warn e.message
exit 2
end
def self.wait_then_exit
disconnected { EM.stop }
EM.add_timer(30) { EM.stop }
shutdown
@thread.join
end
end