【问题标题】:How to fetch room list from openfire?如何从 openfire 获取房间列表?
【发布时间】:2016-12-04 00:53:02
【问题描述】:

我正在使用 openfire 服务器和 XMPP 协议进行聊天,并且我在其中取得了成功。

现在我想实现房间聊天。我在谷歌上搜索了很多,我得到的是“Joing Room”、“Create Room”,但首先我想从会议中获取所有房间名称的列表。

我有会议和空间:

#define CONFERENCE_ROOM_SERVER      @"chatroomforfriends"
#define CONFERENCE_ROOM_NAME        @"cr1"

“chatroomforfriends”是会议名称,包含“cr1”房间。

如何在 iOS 中获取所有房间名称?

【问题讨论】:

    标签: ios objective-c xmpp openfire


    【解决方案1】:

    根据 MUC XEP (0045),您可以通过查询获得所有房间的列表:

    <iq from='hag66@shakespeare.lit/pda'
    id='zb8q41f4'
    to='chat.shakespeare.lit'
    type='get'>
      <query xmlns='http://jabber.org/protocol/disco#items'/>
    </iq>
    

    你得到的响应是:

    <iq from='chat.shakespeare.lit'
      id='zb8q41f4' to='hag66@shakespeare.lit/pda' type='result'>
      <query xmlns='http://jabber.org/protocol/disco#items'>
        <item jid='heath@chat.shakespeare.lit'
          name='A Lonely Heath'/>
        <item jid='coven@chat.shakespeare.lit'
          name='A Dark Cave'/>
        <item jid='forres@chat.shakespeare.lit'
          name='The Palace'/>
        <item jid='inverness@chat.shakespeare.lit'
          name='Macbeth&apos;s Castle'/>
      </query>
    </iq>
    

    详情见XEP-0045

    此方法返回由 MUC 服务托管的所有公共房间。 要获得私人房间,或获得特定用户的房间,您必须编写一个插件来处理您的自定义查询(XMPP 方式),或者您可以为此在 Openfire 中编写一个 servlet(HTTP 方式)。

    【讨论】:

    • 是的,我得到了所有房间,但正如你所说,它获取所有房间,但我只需要获取与用户关联的房间。
    • 那么最简单的方法是创建一个 HTTP 服务(在 Openfire 项目中或可以访问 Openfire DB 的独立中)。该服务将用户 jid 作为请求参数,它可以查询 openfire db 以选择用户的所有房间以及用户的隶属关系(所有者、管理员),并且列表可以由应用程序解析。
    猜你喜欢
    • 1970-01-01
    • 2014-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-29
    相关资源
    最近更新 更多