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