| 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 196
196: def <=>(o)
197: if priority.to_i == o.priority.to_i
198: cmp_interest(o)
199: else
200: priority.to_i <=> o.priority.to_i
201: end
202: end
# File lib/xmpp4r/presence.rb, line 214
214: def cmp_interest(o)
215: if type.nil?
216: if o.type.nil?
217: # both available.
218: PRESENCE_STATUS[show] <=> PRESENCE_STATUS[o.show]
219: else
220: return -1
221: end
222: elsif o.type.nil?
223: return 1
224: else
225: # both are non-nil. We consider this is equal.
226: return 0
227: end
228: 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 177
177: def priority=(val)
178: if val.nil?
179: delete_element('priority')
180: else
181: replace_element_text('priority', val)
182: end
183: 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 :away then text = 'away'
111: when :chat then text = 'chat'
112: when :dnd then text = 'dnd'
113: when :xa then text = 'xa'
114: when nil then text = nil
115: else raise "Invalid value for show."
116: end
117:
118: if text.nil?
119: delete_element(xe)
120: else
121: xe.text = text
122: end
123: 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