Class Jabber::MUC::MUCBrowser
In: lib/xmpp4r/muc/helper/mucbrowser.rb
Parent: Object
Message Presence XMPPStanza Iq XMPPElement X IqQuery Error Singleton IdGenerator Connection Client Component Client Comparable JID RuntimeError ErrorException AuthenticationFailure NoNameXmlnsRegistered SOCKS5Error REXML::Element Stream SOCKS5Bytestreams SOCKS5BytestreamsTarget SOCKS5BytestreamsInitiator XMPPElement StreamHost IqSiFileRange IqSiFile StreamHostUsed IqSi IqFeature XRosterItem RosterItem XMUCUserItem XMUCUserInvite IqPubSub Items Subscription IqPubSubOwner Item Event Feature Identity Item XDataField XDataReported XDataTitle XDataInstructions IqVcard SOCKS5BytestreamsServerStreamHost TCPSocket SOCKS5Socket IqQuery IqQueryBytestreams IqQueryVersion IqQueryRoster IqQueryRPC IqQueryMUCOwner IqQueryDiscoItems IqQueryDiscoInfo IBB IBBTarget IBBInitiator Responder SimpleResponder Iq IqCommand RosterXItem XRoster RosterX X XMUCUser XMUC XDelay XData XMLRPC::ParserWriterChooseMixin Client Server XMLRPC::ParseContentType XMLRPC::BasicServer XParent MUCClient SimpleMUCClient Base DigestMD5 Plain FileSource ServiceHelper NodeHelper CallbackList Callback Semaphore StreamParser SOCKS5BytestreamsPeer SOCKS5BytestreamsServer IBBQueueItem Responder Helper MUCBrowser Helper NodeBrowser Helper lib/xmpp4r/authenticationfailure.rb lib/xmpp4r/xmppstanza.rb lib/xmpp4r/callbacks.rb lib/xmpp4r/idgenerator.rb lib/xmpp4r/connection.rb lib/xmpp4r/iq.rb lib/xmpp4r/jid.rb lib/xmpp4r/errorexception.rb lib/xmpp4r/semaphore.rb lib/xmpp4r/client.rb lib/xmpp4r/stream.rb lib/xmpp4r/x.rb lib/xmpp4r/streamparser.rb lib/xmpp4r/error.rb lib/xmpp4r/component.rb lib/xmpp4r/query.rb lib/xmpp4r/xmppelement.rb lib/xmpp4r/message.rb lib/xmpp4r/presence.rb lib/xmpp4r/bytestreams/helper/ibb/initiator.rb lib/xmpp4r/bytestreams/iq/si.rb lib/xmpp4r/bytestreams/iq/bytestreams.rb lib/xmpp4r/bytestreams/helper/socks5bytestreams/base.rb lib/xmpp4r/bytestreams/helper/socks5bytestreams/server.rb lib/xmpp4r/bytestreams/helper/socks5bytestreams/target.rb lib/xmpp4r/bytestreams/helper/socks5bytestreams/socks5.rb lib/xmpp4r/bytestreams/helper/socks5bytestreams/initiator.rb lib/xmpp4r/bytestreams/helper/ibb/base.rb lib/xmpp4r/bytestreams/helper/ibb/target.rb Bytestreams XParent lib/xmpp4r/version/iq/version.rb lib/xmpp4r/version/helper/responder.rb lib/xmpp4r/version/helper/simpleresponder.rb Version lib/xmpp4r/command/iq/command.rb lib/xmpp4r/command/helper/responder.rb Command lib/xmpp4r/feature_negotiation/iq/feature.rb FeatureNegotiation lib/xmpp4r/roster/helper/roster.rb lib/xmpp4r/roster/iq/roster.rb lib/xmpp4r/roster/x/roster.rb Roster lib/xmpp4r/rpc/helper/server.rb lib/xmpp4r/rpc/helper/client.rb lib/xmpp4r/rpc/iq/rpc.rb RPC lib/xmpp4r/muc/x/muc.rb lib/xmpp4r/muc/helper/mucclient.rb lib/xmpp4r/muc/x/mucuseritem.rb lib/xmpp4r/muc/helper/mucbrowser.rb lib/xmpp4r/muc/x/mucuserinvite.rb lib/xmpp4r/muc/iq/mucowner.rb lib/xmpp4r/muc/helper/simplemucclient.rb MUC lib/xmpp4r/sasl.rb SASL lib/xmpp4r/bytestreams/helper/filetransfer.rb TransferSource FileTransfer lib/xmpp4r/delay/x/delay.rb Delay lib/xmpp4r/pubsub/stanzas/subscription.rb lib/xmpp4r/pubsub/helper/servicehelper.rb lib/xmpp4r/pubsub/stanzas/item.rb lib/xmpp4r/pubsub/helper/nodehelper.rb lib/xmpp4r/pubsub/iq/pubsub.rb lib/xmpp4r/pubsub/stanzas/event.rb lib/xmpp4r/pubsub/helper/nodebrowser.rb lib/xmpp4r/pubsub/stanzas/items.rb PubSub lib/xmpp4r/httpbinding/client.rb HTTPBinding lib/xmpp4r/discovery/iq/discoinfo.rb lib/xmpp4r/discovery/iq/discoitems.rb Discovery lib/xmpp4r/dataforms/x/data.rb Dataforms lib/xmpp4r/vcard/helper/vcard.rb lib/xmpp4r/vcard/iq/vcard.rb Vcard Jabber dot/m_81_0.png

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]