Class: Jabber::MUC::MUCBrowser

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

new(stream)

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

muc_name(jid)

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]

[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

muc_rooms(jid)

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:
    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

[Validate]