class DaemonKit::Jabber
Thin wrapper around xmpp4r-simple, specifically designed to ease configuration of a jabber daemon and provide some added simplicity.
Attributes
connection[R]
Jabber
connection
Public Class Methods
deliver( jid, message )
click to toggle source
Deliver a message to the specified jid.
# File lib/daemon_kit/jabber.rb, line 19 def deliver( jid, message ) instance.connection.deliver( jid, message ) end
instance()
click to toggle source
Use this instead of initializing, keeps it singleton
# File lib/daemon_kit/jabber.rb, line 24 def instance @instance ||= new @instance.startup! end
new()
click to toggle source
# File lib/daemon_kit/jabber.rb, line 85 def initialize options = DaemonKit::Config.load( 'jabber' ) @jabber_id = options.delete("jabber_id") @password = options.delete("password") @resource = options.delete("resource") || 'daemon_kit' @masters = options.delete("masters") || [] @supporters = options.delete("supporters") || [] raise ArgumentError if [ @jabber_id, @password ].any? { |a| a.nil? } end
presence_updates(&block)
click to toggle source
# File lib/daemon_kit/jabber.rb, line 75 def presence_updates(&block) @presence_handler = block end
process_messages()
click to toggle source
# File lib/daemon_kit/jabber.rb, line 48 def process_messages @message_handler ||= Proc.new { |m| DaemonKit.logger.info "Received message from #{m.from}: #{m.body}" } instance.valid_messages { |m| @message_handler.call(m) } end
process_subscriptions()
click to toggle source
# File lib/daemon_kit/jabber.rb, line 65 def process_subscriptions @subscription_handler ||= Proc.new { |friend,presence| DaemonKit.logger.debug "Received presence update from #{friend}: #{presence}" } instance.connection.subscription_requests { |friend,presence| @subscription_handler.call(friend,presence) } end
process_updates()
click to toggle source
# File lib/daemon_kit/jabber.rb, line 54 def process_updates @presence_handler ||= Proc.new { |friend, old_presence, new_presence| DaemonKit.logger.debug "Received presence update: #{friend} went from #{old_presence} to #{new_presence}" } instance.connection.presence_updates { |friend, old_presence, new_presence| @presence_handler.call(friend, old_presence, new_presence) } end
received_messages(&block)
click to toggle source
# File lib/daemon_kit/jabber.rb, line 71 def received_messages(&block) @message_handler = block end
run()
click to toggle source
# File lib/daemon_kit/jabber.rb, line 30 def run DaemonKit.logger.warn "Please use the new XMPP daemons, this class is deprecated" DaemonKit.logger.info "Starting jabber loop" loop do process_messages process_updates process_subscriptions begin sleep 1 rescue Interrupt DaemonKit.logger.warn "Jabber loop interrupted" break end end end
subscription_requests(&block)
click to toggle source
# File lib/daemon_kit/jabber.rb, line 79 def subscription_requests(&block) @subscription_handler = block end
Public Instance Methods
busy() { || ... }
click to toggle source
# File lib/daemon_kit/jabber.rb, line 134 def busy(&block) self.connection.status(:dnd, "Working...") yield self.connection.status(:chat, self.status_line ) end
contacts()
click to toggle source
# File lib/daemon_kit/jabber.rb, line 116 def contacts @masters + @supporters end
shutdown!()
click to toggle source
# File lib/daemon_kit/jabber.rb, line 111 def shutdown! DaemonKit.logger.warn "Disconnecting jabber connection" self.connection.disconnect end
startup!()
click to toggle source
# File lib/daemon_kit/jabber.rb, line 97 def startup! return self if @booted connect! setup_roster! DaemonKit.trap( 'INT', Proc.new { self.shutdown! } ) DaemonKit.trap( 'TERM', Proc.new { self.shutdown! } ) @booted = true self end
status_line()
click to toggle source
# File lib/daemon_kit/jabber.rb, line 140 def status_line "#{DaemonKit.configuration.daemon_name} ready for instructions" end
valid_master?( jid )
click to toggle source
# File lib/daemon_kit/jabber.rb, line 130 def valid_master?( jid ) @masters.include?( jid.strip.to_s ) end
valid_messages(&block)
click to toggle source
# File lib/daemon_kit/jabber.rb, line 120 def valid_messages(&block) self.connection.received_messages.each do |message| next unless valid_master?( message.from ) busy do block.call message end end end
Private Instance Methods
connect!()
click to toggle source
# File lib/daemon_kit/jabber.rb, line 146 def connect! jid = @jabber_id + '/' + @resource @connection = ::Jabber::Simple.new( jid, @password, nil, self.status_line ) end
setup_roster!()
click to toggle source
# File lib/daemon_kit/jabber.rb, line 152 def setup_roster! # cleanup the roster self.connection.roster.items.each_pair do |jid, roster_item| jid = jid.strip.to_s unless self.contacts.include?( jid ) self.connection.remove( jid ) end end # add missing contacts self.contacts.each do |jid| unless self.connection.subscribed_to?( jid ) self.connection.add( jid ) #self.connection.accept_subscription( jid ) end end end