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

Methods

muc_name   muc_rooms   new  

Public Class methods

Initialize a new MUCBrowser helper

[Source]

    # File lib/xmpp4r/muc/helper/mucbrowser.rb, line 20
20:       def initialize(stream)
21:         @stream = stream
22:       end

Public Instance methods

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 ErrorException when receiving <iq type=‘error’/>

jid:[JID] Target entity (set only domain!)
return:[String] or [nil]

[Source]

    # 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]

[Source]

     # 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:         err = nil
 82: 
 83:         @stream.send_with_id(iq) do |answer|
 84: 
 85:           if answer.type == :result
 86:             answer.query.each_element('item') { |item|
 87:               rooms[item.jid] = item.iname
 88:             }
 89:             true
 90:           elsif answer.type == :error
 91:             err = answer.error
 92:             true
 93:           else
 94:             false
 95:           end
 96:         end
 97: 
 98:         if err
 99:           raise "Error getting MUC rooms: #{err.error}, #{err.text}"
100:         end
101: 
102:         rooms
103:       end

[Validate]