| Class | Jabber::MUC::MUCBrowser |
| In: |
lib/xmpp4r/muc/helper/mucbrowser.rb
|
| Parent: | Object |
The MUCBrowser helper can be used to discover Multi-User-Chat components via Service Discovery
See JEP 0045 sections 6.1. and 6.2.
Usage of its functions should be threaded as responses can take a while
Initialize a new MUCBrowser helper
# File lib/xmpp4r/muc/helper/mucbrowser.rb, line 20
20: def initialize(stream)
21: @stream = stream
22: end
Retrieve the name of a MUC component, depending upon whether the target entity supports the MUC protocol.
A return-value of nil does not mean that the entity does not exist or does not support Service Discovery! nil just means that this is not a MUC-compliant service.
Throws an ServerError when receiving <iq type=‘error’/>
| jid: | [JID] Target entity (set only domain!) |
| return: | [String] or [nil] |
# File lib/xmpp4r/muc/helper/mucbrowser.rb, line 37
37: def muc_name(jid)
38: iq = Iq.new(:get, jid)
39: iq.from = @stream.jid # Enable components to use this
40: iq.add(Discovery::IqQueryDiscoInfo.new)
41:
42: res = nil
43:
44: @stream.send_with_id(iq) do |answer|
45: if answer.type == :result
46: answer.query.each_element('feature') { |feature|
47: # Look if the component has a MUC or Groupchat feature
48: if feature.var == 'http://jabber.org/protocol/muc' or feature.var == 'gc-1.0'
49: # If so, get the identity
50: if answer.query.first_element('identity')
51: res = answer.query.first_element('identity').iname
52: end
53: end
54: }
55: true
56: else
57: false
58: end
59: end
60:
61: res
62: end
Retrieve the existing rooms of a MUC component
The resulting Hash contains pairs of room JID and room name
Usage:
my_mucbrowse_helper.muc_rooms('conference.jabber.org').each { |jid,name| ... }
Throws an exception when receiving <iq type=‘error’/>
| jid: | [JID] Target entity (set only domain!) |
| return: | [Hash] |
# File lib/xmpp4r/muc/helper/mucbrowser.rb, line 75
75: def muc_rooms(jid)
76: iq = Iq.new(:get, jid)
77: iq.from = @stream.jid # Enable components to use this
78: iq.add(Discovery::IqQueryDiscoItems.new)
79:
80: rooms = {}
81:
82: @stream.send_with_id(iq) do |answer|
83: answer.query.each_element('item') { |item|
84: rooms[item.jid] = item.iname
85: }
86: end
87:
88: rooms
89: end