| Class | Jabber::Presence |
| In: |
lib/xmpp4r/presence.rb
|
| Parent: | XMPPStanza |
The presence class is used to construct presence messages to send to the Jabber service.
| PRESENCE_STATUS | = | { :chat => 4, nil => 3, :dnd => 2, :away => 1, :xa => 0, :unavailable => -1, :error => -2 } | Compare two presences. The most suitable to talk with is the biggest. |
Create presence stanza
| show: | [String] Initial Availability Status |
| status: | [String] Initial status message |
| priority: | [Fixnum] Initial priority value |
# File lib/xmpp4r/presence.rb, line 24
24: def initialize(show=nil, status=nil, priority=nil)
25: super()
26: set_show(show) if show
27: set_status(status) if status
28: set_priority(priority) if priority
29: end
Compare two presences using priority (with cmp_interest as fall-back).
# File lib/xmpp4r/presence.rb, line 197
197: def <=>(o)
198: if priority.to_i == o.priority.to_i
199: cmp_interest(o)
200: else
201: priority.to_i <=> o.priority.to_i
202: end
203: end
# File lib/xmpp4r/presence.rb, line 215
215: def cmp_interest(o)
216: if type.nil?
217: if o.type.nil?
218: # both available.
219: PRESENCE_STATUS[show] <=> PRESENCE_STATUS[o.show]
220: else
221: return -1
222: end
223: elsif o.type.nil?
224: return 1
225: else
226: # both are non-nil. We consider this is equal.
227: return 0
228: end
229: end
Set presence priority
| val: | [Integer] 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
178: def priority=(val)
179: if val.nil?
180: delete_element('priority')
181: else
182: replace_element_text('priority', val)
183: end
184: end
Get Availability Status (RFC3921 - 5.2)
| result: | [Symbol] or [Nil] Valid values according to RFC3921: |
# File lib/xmpp4r/presence.rb, line 89
89: def show
90: e = first_element('show')
91: text = e ? e.text : nil
92: case text
93: when 'away' then :away
94: when 'chat' then :chat
95: when 'dnd' then :dnd
96: when 'xa' then :xa
97: else nil
98: end
99: end
Set Availability Status
| val: | [Symbol] or [Nil] See show for explanation |
# File lib/xmpp4r/presence.rb, line 104
104: def show=(val)
105: xe = first_element('show')
106: if xe.nil?
107: xe = add_element('show')
108: end
109: case val
110: when String then raise "Invalid value for show."
111: when :away then text = 'away'
112: when :chat then text = 'chat'
113: when :dnd then text = 'dnd'
114: when :xa then text = 'xa'
115: when nil then text = nil
116: else raise "Invalid value for show."
117: end
118:
119: if text.nil?
120: delete_element(xe)
121: else
122: xe.text = text
123: end
124: end
Get type of presence
| result: | [Symbol] or [Nil] Possible values are: |
See RFC3921 - 2.2.1. for explanation.
# File lib/xmpp4r/presence.rb, line 44
44: def type
45: case super
46: when 'error' then :error
47: when 'probe' then :probe
48: when 'subscribe' then :subscribe
49: when 'subscribed' then :subscribed
50: when 'unavailable' then :unavailable
51: when 'unsubscribe' then :unsubscribe
52: when 'unsubscribed' then :unsubscribed
53: else nil
54: end
55: end
Set type of presence
| val: | [Symbol] See type for possible subscription types |
# File lib/xmpp4r/presence.rb, line 60
60: def type=(val)
61: case val
62: when :error then super('error')
63: when :probe then super('probe')
64: when :subscribe then super('subscribe')
65: when :subscribed then super('subscribed')
66: when :unavailable then super('unavailable')
67: when :unsubscribe then super('unsubscribe')
68: when :unsubscribed then super('unsubscribed')
69: else super(nil)
70: end
71: end