The presence class is used to construct presence messages to send to the Jabber service.
Compare two presences. The most suitable to talk with is the biggest.
Create presence stanza
Initial Availability Status (see show)
Initial status message
Initial priority value
# File lib/xmpp4r/presence.rb, line 24 def initialize(show=nil, status=nil, priority=nil) super() set_show(show) if show set_status(status) if status set_priority(priority) if priority end
Compare two presences using priority (with #cmp_interest as fall-back).
# File lib/xmpp4r/presence.rb, line 197 def <=>(o) if priority.to_i == o.priority.to_i cmp_interest(o) else priority.to_i <=> o.priority.to_i end end
# File lib/xmpp4r/presence.rb, line 215 def cmp_interest(o) if type.nil? if o.type.nil? # both available. PRESENCE_STATUS[show] <=> PRESENCE_STATUS[o.show] else return -1 end elsif o.type.nil? return 1 else # both are non-nil. We consider this is equal. return 0 end end
Get presence priority, or nil if absent
# File lib/xmpp4r/presence.rb, line 163 def priority e = first_element_text('priority') if e return e.to_i else return nil end end
Set presence priority
Priority value between -128 and +127
Warning: negative values make you receive no subscription requests etc. (RFC3921 - 2.2.2.3.)
# File lib/xmpp4r/presence.rb, line 178 def priority=(val) if val.nil? delete_element('priority') else replace_element_text('priority', val) end end
Set presence priority (chaining-friendly)
Priority value between -128 and +127
# File lib/xmpp4r/presence.rb, line 189 def set_priority(val) self.priority = val self end
Set Availability Status (chaining-friendly)
or [Nil] See show for explanation
# File lib/xmpp4r/presence.rb, line 129 def set_show(val) self.show = val self end
Set status message (chaining-friendly)
or nil
# File lib/xmpp4r/presence.rb, line 155 def set_status(val) self.status = val self end
Set type of presence (chaining-friendly)
See type for possible subscription types
# File lib/xmpp4r/presence.rb, line 76 def set_type(val) self.type = val self end
Get Availability Status (RFC3921 - 5.2)
or [Nil] Valid values according to RFC3921:
nil (Available, no <show/> element)
:away
:chat (Free for chat)
:dnd (Do not disturb)
:xa (Extended away)
# File lib/xmpp4r/presence.rb, line 89 def show e = first_element('show') text = e ? e.text : nil case text when 'away' then :away when 'chat' then :chat when 'dnd' then :dnd when 'xa' then :xa else nil end end
Set Availability Status
or [Nil] See show for explanation
# File lib/xmpp4r/presence.rb, line 104 def show=(val) xe = first_element('show') if xe.nil? xe = add_element('show') end case val when String then raise "Invalid value for show." when :away then text = 'away' when :chat then text = 'chat' when :dnd then text = 'dnd' when :xa then text = 'xa' when nil then text = nil else raise "Invalid value for show." end if text.nil? delete_element(xe) else xe.text = text end end
Get status message
or nil
# File lib/xmpp4r/presence.rb, line 137 def status first_element_text('status') end
Set status message
or nil
# File lib/xmpp4r/presence.rb, line 144 def status=(val) if val.nil? delete_element('status') else replace_element_text('status', val) end end
Get type of presence
or [Nil] Possible values are:
:error
:probe (Servers send this to request presence information)
:subscribe (Subscription request)
:subscribed (Subscription approval)
:unavailable (User has gone offline)
:unsubscribe (Unsubscription request)
:unsubscribed (Unsubscription approval)
(available)
See RFC3921 - 2.2.1. for explanation.
# File lib/xmpp4r/presence.rb, line 44 def type case super when 'error' then :error when 'probe' then :probe when 'subscribe' then :subscribe when 'subscribed' then :subscribed when 'unavailable' then :unavailable when 'unsubscribe' then :unsubscribe when 'unsubscribed' then :unsubscribed else nil end end
Set type of presence
See type for possible subscription types
# File lib/xmpp4r/presence.rb, line 60 def type=(val) case val when :error then super('error') when :probe then super('probe') when :subscribe then super('subscribe') when :subscribed then super('subscribed') when :unavailable then super('unavailable') when :unsubscribe then super('unsubscribe') when :unsubscribed then super('unsubscribed') else super(nil) end end