如何区分用户的JID和MUC的JID?

时间:2014-01-31 20:01:15

标签: xmpp smack multiuserchat

假设我有两个JID:

  • JID 1:bob@example.com
  • JID 2 room@chat.example.com

JID 2明确指的是聊天服务器,但聊天服务器并不总是在其中包含单词chat或conference。

有没有办法,使用Smack库,告诉哪一个是哪个?

2 个答案:

答案 0 :(得分:2)

通过查看JID你无法分辨。您必须在给定的协议交换中保留足够的上下文,以了解您正在与之交谈的内容。

通常在启动时,客户端会向服务器发送disco#items查询:

<iq type='get'
    to='shakespeare.lit'
    id='items1'>
  <query xmlns='http://jabber.org/protocol/disco#items'/>
</iq>

找到所有本地服务,然后向每个服务发送disco#info查询以查找有关该服务的更多信息。一旦你find a MUC server

<iq from='chat.shakespeare.lit'
    type='result'>
  <query xmlns='http://jabber.org/protocol/disco#info'>
    <identity
        category='conference'
        name='Shakespearean Chat Service'
        type='text'/>
    <feature var='http://jabber.org/protocol/muc'/>
  </query>
</iq>

您知道包含此域名的所有JID(上例中的chat.shakespeare.lit)都与MUC会议室相关联。

答案 1 :(得分:0)

MUC中的用户JID将(应该)在最后具有用户名,并且看起来像:

roomname@conference.example.com/username