XMPP多用户聊天获取用户列表

时间:2011-07-09 14:12:48

标签: xmpp

获取所有用户的列表以及XMPP多用户聊天的状态 我这样做了

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

获取列表但没有状态。 我需要知道状态的所有用户吗?

2 个答案:

答案 0 :(得分:7)

请阅读XEP-0045,其中介绍了多用户聊天(MUC)协议。你需要加入房间:

<presence
    from='hag66@shakespeare.lit/pda'
    to='coven@chat.shakespeare.lit/thirdwitch'>
  <x xmlns='http://jabber.org/protocol/muc'/>
</presence>

然后,你将从房间的每个占用者那里得到一个状态节,其当前状态为:

<presence
    from='coven@chat.shakespeare.lit/firstwitch'
    to='hag66@shakespeare.lit/pda'>
  <x xmlns='http://jabber.org/protocol/muc#user'>
    <item affiliation='owner' role='moderator'/>
  </x>
</presence>

<presence
    from='coven@chat.shakespeare.lit/secondwitch'
    to='hag66@shakespeare.lit/pda'>
  <x xmlns='http://jabber.org/protocol/muc#user'>
    <item affiliation='admin' role='moderator'/>
  </x>
</presence>

在您提出问题之前,没有,当您“完成”接收这些通知时,无法判断,因为用户可能随时来来往往。您现在订阅了占用者的存在变化,并且必须跟踪接收方的当前状态。

答案 1 :(得分:1)

通过XMPP RFC阅读,我看到状态是通过状态消息传达的,并且您要求另一个实体现在通过发送{来报告其状态(而不是等待它在广播中告诉您) {1}}状态请求,您将获得定向响应(§5.5 of the RFC提供了一些示例)。当然,你可以正确地解释他们所说的内容......