6. Entity Use Cases

A MUC implementation MUST support Service Discovery [7].

服务端必须实现 service discover

6.1 Discovering Component Support for MUC

发现服务器是否支持muc

A Jabber entity may wish to discover if a service implements the Multi-User Chat protocol; in order to do so, it sends a service discovery information ("disco#info") query to the component's JID:

一个jabber实体会去询问服务器,是否服务器端支持muc的协议。

例子1 : 用户向服务器询问是否支持muc的协议

iq get 协议 xmlns = "http://jabber.org/protocol/disco#info"

<iq from='hag66@shakespeare.lit/pda' fuul jid
    id='disco1'
    to='chat.shakespeare.lit' 服务器
    type='get'>
  <query xmlns='http://jabber.org/protocol/disco#info'/>
</iq>
   

The service MUST return its identity and the features it supports:

服务器必须返回是否支持muc群聊

Example 2. Service Returns Disco Info Results

<iq from='chat.shakespeare.lit' 服务器
    id='disco1'
    to='hag66@shakespeare.lit/pda' jid
    type='result'>
  <query xmlns='http://jabber.org/protocol/disco#info'>
    <identity
        category='conference'
        name='Macbeth Chat Service'
        type='text'/>
    <feature var='http://jabber.org/protocol/muc'/>
  </query>
</iq>
   

Note: Because MUC is a superset of the old "groupchat 1.0" protocol, a MUC service SHOULD NOT return a <feature var='gc-1.0'/> entry in a disco#info result.

6.2 Discovering Rooms

发现房间

The service discovery items ("disco#items") protocol enables a user to query a service for a list of associated items, which in the case of a chat service would consist of the specific chat rooms hosted by the service.

Example 3. User Queries Chat Service for Rooms

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

The service SHOULD return a full list of the rooms it hosts.

Example 4. Service Returns Disco Item Results

服务器返回disco item 的结果

<iq from='chat.shakespeare.lit' server
    id='disco2'
    to='hag66@shakespeare.lit/pda' jid
    type='result'>
  <query xmlns='http://jabber.org/protocol/disco#items'>
    <item jid='heath@chat.shakespeare.lit'
          name='A Lonely Heath'/>
    <item jid='darkcave@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>
   

If the full list of rooms is large (see XEP-0030 for details), the service MAY return only a partial list of rooms. If it does so, it SHOULD include a <set/> element (as defined inResult Set Management [8]) to indicate that the list not the full result set.

如果全部房间列表太长,服务器可以返回一部分房间列表。如果这样做了,服务器返回的内容应该包含一个set节点,代表返回的列表不是全部列表

Example 5. Service Returns Limited List of Disco Item Results

<iq from='rooms.shakespeare.lit' server
    id='disco-rsm-1'
    to='hag66@shakespeare.lit/pda'jid
    type='result'>
  <query xmlns='http://jabber.org/protocol/disco#items'>
    <item jid='alls-well-that-ends-well@rooms.shakespeare.lit'/> itmes
    <item jid='as-you-like-it@rooms.shakespeare.lit'/>
    <item jid='cleopatra@rooms.shakespeare.lit'/>
    <item jid='comedy-of-errors@rooms.shakespeare.lit'/>
    <item jid='coriolanus@rooms.shakespeare.lit'/>
    <item jid='cymbeline@rooms.shakespeare.lit'/>
    <item jid='hamlet@rooms.shakespeare.lit'/>
    <item jid='henry-the-fourth-one@rooms.shakespeare.lit'/>
    <item jid='henry-the-fourth-two@rooms.shakespeare.lit'/>
    <item jid='henry-the-fifth@rooms.shakespeare.lit'/>
    <set xmlns='http://jabber.org/protocol/rsm'>
      <first index='0'>alls-well-that-ends-well@rooms.shakespeare.lit</first>
      <last>henry-the-fifth@rooms.shakespeare.lit</last>
      <count>37</count>
    </set>
  </query>
</iq>
   

6.3 Querying for Room Information

查询房间消息

Using the disco#info protocol, a user may also query a specific chat room for more detailed information about the room. A user SHOULD do so before entering a room in order to determine the privacy and security profile of the room configuration (see the Security Considerations for details).

用 disco#info 协议,用户也可以查询一个指定的房间的信息,一个用户应该在进入一个房间之前来确定这个房间的隐私和安全配置

Example 6. User Queries for Information about a Specific Chat Room

<iq from='hag66@shakespeare.lit/pda' jid
    id='disco3'
    to='darkcave@chat.shakespeare.lit' roomid
    type='get'>
  <query xmlns='http://jabber.org/protocol/disco#info'/>
</iq>
   

The room MUST return its identity and SHOULD return the features it supports:

房间必须返回他的属性

Example 7. Room Returns Disco Info Results

<iq from='darkcave@chat.shakespeare.lit' roomid
    id='disco3'
    to='hag66@shakespeare.lit/pda' jid
    type='result'>
  <query xmlns='http://jabber.org/protocol/disco#info'>
    <identity
        category='conference'
        name='A Dark Cave'
        type='text'/>
    <feature var='http://jabber.org/protocol/muc'/>
    <feature var='muc_passwordprotected'/>
    <feature var='muc_hidden'/>
    <feature var='muc_temporary'/>
    <feature var='muc_open'/>
    <feature var='muc_unmoderated'/>
    <feature var='muc_nonanonymous'/>
  </query>
</iq>
   

Note: Because MUC is a superset of the old "groupchat 1.0" protocol, a MUC room SHOULD NOT return a <feature var='gc-1.0'/> entry in a disco#info result. The room SHOULD return the materially-relevant features it supports, such as password protection and room moderation (these are listed fully in the feature registry maintained by the XMPP Registrar; see also the XMPP Registrar section of this document).

应该返回一些有用的支持特征。 比如是否是密码房间,是否是moderation房间等。

A chatroom MAY return more detailed information in its disco#info response using Service Discovery Extensions [9], identified by inclusion of a hidden FORM_TYPE field whose value is "http://jabber.org/protocol/muc#roominfo". Such information might include a more verbose description of the room, the current room subject, and the current number of occupants in the room:

一个聊天室或许会返回一些扩展信息,用muc#roominfo这个扩展的xmlns,包含更多的房间的信息,例如房间的用户的信息。

Example 8. Room Returns Extended Disco Info Results

<iq from='darkcave@chat.shakespeare.lit'
    id='disco3a'
    to='hag66@shakespeare.lit/pda'
    type='result'>
  <query xmlns='http://jabber.org/protocol/disco#info'>
    <identity
        category='conference'
        name='A Dark Cave'
        type='text'/>
    <feature var='http://jabber.org/protocol/muc'/>
    <feature var='muc_passwordprotected'/>
    <feature var='muc_hidden'/>
    <feature var='muc_temporary'/>
    <feature var='muc_open'/>
    <feature var='muc_unmoderated'/>
    <feature var='muc_nonanonymous'/>
    <x xmlns='jabber:x:data' type='result'>
      <field var='FORM_TYPE' type='hidden'>
        <value>http://jabber.org/protocol/muc#roominfo</value>
      </field>
      <field var='muc#roominfo_description' label='Description'>
        <value>The place for all good witches!</value>
      </field>
      <field var='muc#roominfo_changesubject' label='Whether Occupants May Change the Subject'>
        <value>true</value>
      </field>
      <field var='muc#roominfo_contactjid' label='Contact Addresses'>
        <value>crone1@shakespeare.lit</value>
      </field>
      <field var='muc#roominfo_subject' label='Subject'>
        <value>Spells</value>
      </field>
      <field var='muc#roomconfig_changesubject' label='Subject can be modified'>
        <value>true</value>
      </field>
      <field var='muc#roominfo_occupants' label='Number of occupants'>
        <value>3</value>
      </field>
      <field var='muc#roominfo_ldapgroup' label='Associated LDAP Group'>
        <value>dc=lit,dc=shakespeare,cn=witches</value>
      </field>
      <field var='muc#roominfo_lang' label='Language of discussion'>
        <value>en</value>
      </field>
      <field var='muc#roominfo_logs' label='URL for discussion logs'>
        <value>http://www.shakespeare.lit/chatlogs/darkcave/</value>
      </field>
      <field var='muc#roominfo_pubsub' label='Associated pubsub node'>
        <value>xmpp:pubsub.shakespeare.lit?;node=the-darkcave-node</value>
      </field>
    </x>
  </query>
</iq>
   

Some extended room information may be dynamically generated (e.g., the URL for discussion logs, which may be based on service-wide configuration). Other information may be based on the room configuration, which is why any field defined for the muc#roomconfig FORM_TYPE can be included in the extended service discovery fields (as shown above for the muc#roomconfig_changesubject field).

Note: The foregoing extended service discovery fields for the 'http://jabber.org/protocol/muc#roominfo' FORM_TYPE may be supplemented in the future via the mechanisms described in the Field Standardization section of this document.

6.4 Querying for Room Items

查询房间条目

A user MAY also query a specific chat room for its associated items:

一个用户可以询问一个特定的聊天室的一些item

Example 9. User Queries for Items Associated with a Specific Chat Room

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

An implementation MAY return a list of existing occupants if that information is publicly available, or return no list at all if this information is kept private.

服务端可以返回一个房间内的occupants的信息列表。如果这个房间时public的。

Example 10. Room Returns Disco Item Results (Items are Public)

<iq from='darkcave@chat.shakespeare.lit' roomid
    id='disco4'
    to='hag66@shakespeare.lit/pda' jid
    type='result'>
  <query xmlns='http://jabber.org/protocol/disco#items'>
    <item jid='darkcave@chat.shakespeare.lit/firstwitch'/> roomjid
    <item jid='darkcave@chat.shakespeare.lit/secondwitch'/> roomjid
  </query>
</iq>
   

Note: These <item/> elements are qualified by the disco#items namespace, not the muc namespace; this means that they cannot possess 'affiliation' or 'role' attributes, for example.

item节包含在disco#items这个xmlns里面,不是muc,是因为不能有affiliation和role这些属性。比如可以返回空。

Example 11. Room Returns Empty Disco Item Results (Items are Private)

<iq from='darkcave@chat.shakespeare.lit' roomid
    id='disco4'
    to='hag66@shakespeare.lit/pda' jid
    type='result'>
  <query xmlns='http://jabber.org/protocol/disco#items'/>
</iq>
   

6.5 Querying a Room Occupant

查询一个房间的occupant

If a non-occupant attempts to send a disco request to an address of the form <room@service/nick>, a MUC service SHOULD return the request to the entity and specify a <bad-request/> error condition. If an occupant sends such a request, the service MAY pass it through the intended recipient; see the Implementation Guidelines section of this document for details.

non-occupant 试图发disco请求给一个room会被驳回。

6.6 Discovering Client Support for MUC

查询用户对muc的支持

A Jabber user may want to discover if one of the user's contacts supports the Multi-User Chat protocol. This is done using Service Discovery.

一个jabber用户或许想查询其他的用户是否支持muc的聊天协议

Example 12. User Queries Contact Regarding MUC Support

<iq from='hag66@shakespeare.lit/pda' jid
    id='disco5'
    to='wiccarocks@shakespeare.lit/laptop' jid
    type='get'>
  <query xmlns='http://jabber.org/protocol/disco#info'/>
</iq>
   

The client SHOULD return its identity and the features it supports:

客户端应该返回其是否支持群聊协议

Example 13. Contact Returns Disco Info Results

<iq from='wiccarocks@shakespeare.lit/laptop'
    id='disco5'
    to='hag66@shakespeare.lit/pda'
    type='result'>
  <query xmlns='http://jabber.org/protocol/disco#info'>
    <identity
        category='client'
        type='pc'/>
    ...
    <feature var='http://jabber.org/protocol/muc'/>
    ...
  </query>
</iq>
   

A user may also query a contact regarding which rooms the contact is in. This is done by querying the contact's full JID (<user@host/resource>) while specifying the well-known Service Discovery node 'http://jabber.org/protocol/muc#rooms':

一个用户也可能想知道另外一个用户都在那些房间。包含muc#rooms

Example 14. User Queries Contact for Current Rooms

<iq from='hag66@shakespeare.lit/pda' jid
    id='rooms1'
    to='wiccarocks@shakespeare.lit/laptop' jid
    type='get'>
  <query xmlns='http://jabber.org/protocol/disco#items'
         node='http://jabber.org/protocol/muc#rooms'/>
</iq>
   

Example 15. Contact Returns Room Query Results

<iq from='wiccarocks@shakespeare.lit/laptop' jid
    id='rooms1'
    to='hag66@shakespeare.lit/pda' jid
    type='result'>
  <query xmlns='http://jabber.org/protocol/disco#items'
         node='http://jabber.org/protocol/muc#rooms'>
    <item jid='darkcave@chat.shakespeare.lit'/> item
    <item jid='characters@conference.shakespeare.lit'/>
  </query>
</iq>
   

Optionally, the contact MAY include its roomnick as the value of the 'name' attribute:

也可以携带用户昵称返回。

    ...
    <item jid='darkcave@chat.shakespeare.lit'
          name='secondwitch'/>
    ...

xmpp muc 群聊协议 3的更多相关文章

  1. xmpp muc 群聊协议 4

    7. Occupant Use Cases The main actor in a multi-user chat environment is the occupant, who can be sa ...

  2. xmpp muc 群聊协议 2

    Roles and Affiliations There are two dimensions along which we can measure a user's connection with ...

  3. xmpp muc 群聊协议 1

    翻译来自 :http://wiki.jabbercn.org/index.php?title=XEP-0045&variant=zh-cn#.E6.9C.AF.E8.AF.AD 通用术语 Af ...

  4. Strophe.js连接XMPP服务器Openfire、Tigase实现Web私聊、群聊(MUC)

    XMPP(Extensible Messaging and Presence Protocol)是一种网络即时通讯协议,它基于XML,具有很强的扩展性,被广泛使用在即时通讯软件.网络游戏聊天.Web聊 ...

  5. 基于ejabberd简单实现xmpp群聊离线消息

    首先,xmpp服务器是基于ejabberd.离线消息模块是mod_interact,原地址地址:https://github.com/adamvduke/mod_interact: 修改后实现群聊离线 ...

  6. Java-->实现群聊功能(C/S模式--TCP协议)

    --> Java 对TCP协议的支持: --> java.net包中定义了两个类ServerSocket 和Socket ,分别用来实现双向连接的server 端和client 端. -- ...

  7. XMPP群聊消息重复,自己收到自己发出的消息,群警告消息如何屏蔽

    在XMPP的"groupchat"中,创建群的时候会收到群发的"This room is locked from entry until configuration is ...

  8. 使用java做一个能赚钱的微信群聊机器人(2020年基于PC端协议最新可用版)

    前言 微信群机器人,主要用来管理群聊,提供类似天气查询.点歌.机器人聊天等用途. 由于微信将web端的协议封杀后,很多基于http协议的群聊机器人都失效了,所以这里使用基于PC端协议的插件来实现. 声 ...

  9. smack 4.1创建群聊

    smack 4.1.1版本对群聊修改了很多,MultUserChat的构造函数修改成了私有,以前通过new MultUserChat创建聊天室,现在通过MultUserChatMananger先通过r ...

随机推荐

  1. Mac /Ubuntu/Windows 下安装nodejs

    Mac If you're using the excellent homebrew package manager, you can install node with one command: b ...

  2. Unity3D刚体不同力的测试(ForceMode,AddForce,RelativeAddForce)

    摘自圣典的一段翻译: ForceAdd a continuous force to the rigidbody, using its mass.添加一个可持续力到刚体,使用它的质量.Accelerat ...

  3. rownum浅析

    对于 Oracle 的 rownum 问题,非常多资料都说不支持>.>=.=.between...and,仅仅能用以上符号(<.<=.!=),并不是说用>, >=, ...

  4. (2.0)Smali系列学习之Smali语法

    一.smali的包中信息 .class  public Lcom/aaaaa;.super  Lcom/bbbbb;.source "ccccc.java" 1.它是com.aaa ...

  5. 221. Add Two Numbers II【medium】

    You have two numbers represented by a linked list, where each node contains a single digit. The digi ...

  6. Flask系列:数据库

    这个系列是学习<Flask Web开发:基于Python的Web应用开发实战>的部分笔记 对于用户提交的信息,包括 账号.文章 等,需要能够将这些数据保存下来 持久存储的三种方法: 文件: ...

  7. django模板{%for%}中的forloop的应用

    {% for k, v in data.items %} {{ k }}: {{ v }} {% endfor %} 这里假设data.items这个列表类似:[ [a,b],[c,d],[e,f]. ...

  8. 两款 REST 测试工具

    用CURL命令行测试REST API 无疑是低效率的,这里把最近使用的两款 Chrome 插件总结下 POSTMAN 简单易用 REST Console 功能强大 使用的话用POSTMAN就够用了,但 ...

  9. C. Beautiful Numbers

    C. Beautiful Numbers Time Limit : 4000/2000ms (Java/Other)   Memory Limit : 524288/262144K (Java/Oth ...

  10. MFC编程之创建Ribbon样式的应用程序框架

    Ribbon界面就是微软从Office2007開始引入的一种为了使应用程序的功能更加易于发现和使用.降低了点击鼠标的次数的新型界面.从实际效果来看,不仅外观美丽,并且功能直观,用户操作简洁方便. 利用 ...