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

- (XMPP) initialize



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

+ (Object) run(&block)



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

- (Object) become_available



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

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

- (Object) busy(message = nil, &block)



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

- (Object) configure_roster!



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

- (Object) contacts



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

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

- (Object) run



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

def run
  client.run
end

- (Boolean) trusted?(message)



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

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

- (Boolean) valid_contact?(jid)



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

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