Class: DaemonKit::XMPP

Inherits:
Object
  • Object
show all
Includes:
Blather::DSL
Defined in:
lib/daemon_kit/xmpp.rb

Overview

Thin wrapper around the blather DSL

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeXMPP

Returns a new instance of XMPP.



29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# File 'lib/daemon_kit/xmpp.rb', line 29

def initialize
  @config = DaemonKit::Config.load('xmpp')

  if @config.enable_logging
    Blather.logger = DaemonKit.logger
  end

  jid = if @config.resource
    "#{@config.jabber_id}/#{@config.resource}"
  else
    @config.jabber_id
  end

  # host & port allow nil, defaults to the jabber id host and default port
  # so if those keys are not present in the config, its ok.
  setup jid, @config.password, @config.host, @config.port

  when_ready do
    configure_roster!
    become_available
  end

  return if @config['require_master'] == false

  message do |m|
    trusted?( m ) ? pass : halt
  end
end

Class Method Details

.run(&block) ⇒ Object



12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# File 'lib/daemon_kit/xmpp.rb', line 12

def run( &block )
  if Blather::VERSION < '0.8.0'
    DaemonKit.logger.warn "Blather version to old, please upgrade to 0.8.x"
  end

  DaemonKit.trap('INT') { ::EM.stop }
  DaemonKit.trap('TERM') { ::EM.stop }

  DaemonKit::EM.run {

    xmpp = new
    xmpp.instance_eval( &block )
    xmpp.run
  }
end

Instance Method Details

#become_availableObject



82
83
84
# File 'lib/daemon_kit/xmpp.rb', line 82

def become_available
  set_status( :chat, "#{DaemonKit.configuration.daemon_name} is available" )
end

#busy(message = nil, &block) ⇒ Object



102
103
104
105
106
107
108
# File 'lib/daemon_kit/xmpp.rb', line 102

def busy( message = nil, &block )
  set_status( :dnd, message )

  block.call

  become_available
end

#configure_roster!Object



58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
# File 'lib/daemon_kit/xmpp.rb', line 58

def configure_roster!
  DaemonKit.logger.debug 'Configuring roster'

  my_roster.each do |item|
    unless valid_contact?( item.jid )
      DaemonKit.logger.debug "Removing #{item.jid} from roster"

      my_roster.delete( item.jid )
      next
    end
  end

  contacts.each do |jid|
    DaemonKit.logger.debug "Adding #{jid} to roster"

    my_roster.add( Blather::JID.new( jid ) )
  end

  my_roster.each do |item|
    item.subscription = :both
    item.ask = :subscribe
  end
end

#contactsObject



90
91
92
# File 'lib/daemon_kit/xmpp.rb', line 90

def contacts
  @config.masters | ( @config.supporters || [] )
end

#runObject



98
99
100
# File 'lib/daemon_kit/xmpp.rb', line 98

def run
  client.run
end

#trusted?(message) ⇒ Boolean

Returns:

  • (Boolean)


86
87
88
# File 'lib/daemon_kit/xmpp.rb', line 86

def trusted?( message )
  @config.masters.include?( message.from.stripped.to_s )
end

#valid_contact?(jid) ⇒ Boolean

Returns:

  • (Boolean)


94
95
96
# File 'lib/daemon_kit/xmpp.rb', line 94

def valid_contact?( jid )
  contacts.include?( jid.stripped.to_s )
end