码迷,mamicode.com
首页 > 其他好文 > 详细

XMPP Roster

时间:2014-08-13 03:34:05      阅读:224      评论:0      收藏:0      [点我收藏+]

标签:os   io   for   ar   div   amp   服务器   .net   

简介

Roster Set

名录设置操作包括创建、更新和删除联系人条目,语法上是一个从客户端发送到服务器的 IQ 节点,节点类型为 set,必须且只包含一个 item 节点,此 item 节点不应该包含 subscription 属性,除非 subscription 的值为 remove。

Roster Push

名录推送与名录设置类似,当创建、更新或删除联系人条目时由服务器发送到客户端。收到名录推送的时候应该发送给服务器一个类型为 result 或 error 的回复。

加载 Roster

// 请求 roster
<iq from=‘juliet@example.com/balcony‘
    id=‘bv1bs71f‘
    type=‘get‘>
  <query xmlns=‘jabber:iq:roster‘/>
</iq>

// 请求成功
<iq id=‘bv1bs71f‘
    to=‘juliet@example.com/balcony‘
    type=‘result‘>
  <query xmlns=‘jabber:iq:roster‘ ver=‘ver11‘>
    <item jid=‘romeo@example.net‘ name=‘Romeo‘ subscription=‘both‘>
      <group>Friends</group>
    </item>
    <item jid=‘mercutio@example.com‘ name=‘Mercutio‘ subscription=‘from‘/>
    <item jid=‘benvolio@example.net‘ name=‘Benvolio‘ subscription=‘both‘/>
  </query>
</iq>

// roster 为空
<iq id=‘bv1bs71f‘
    to=‘juliet@example.com/chamber‘
    type=‘result‘>
  <query xmlns=‘jabber:iq:roster‘ ver=‘ver7‘/>
</iq>

// roster 不存在
<iq id=‘bv1bs71f‘
    to=‘juliet@example.com/chamber‘
    type=‘error‘>
  <error type=‘cancel‘>
    <item-not-found xmlns=‘urn:ietf:params:xml:ns:xmpp-stanzas‘/>
  </error>
</iq>

添加联系人

// 请求添加
<iq from=‘juliet@example.com/balcony‘
    id=‘ph1xaz53‘
    type=‘set‘>
  <query xmlns=‘jabber:iq:roster‘>
    <item jid=‘nurse@example.com‘ name=‘Nurse‘>
      <group>Servants</group>
    </item>
  </query>
</iq>

// 添加成功
<iq id=‘ph1xaz53‘
    to=‘juliet@example.com/balcony‘
    type=‘result‘/>

// 成功后会收到 Roster Push
<iq to=‘juliet@example.com/balcony‘
    id=‘a78b4q6ha463‘
    type=‘set‘>
  <query xmlns=‘jabber:iq:roster‘ ver=‘ver13‘>
    <item jid=‘nurse@example.com‘ name=‘Nurse‘ subscription=‘none‘>
      <group>Servants</group>
    </item>
  </query>
</iq>

<iq to=‘juliet@example.com/chamber‘
    id=‘x81g3bdy4n19‘
    type=‘set‘>
  <query xmlns=‘jabber:iq:roster‘ ver=‘ver13‘>
    <item jid=‘nurse@example.com‘ name=‘Nurse‘ subscription=‘none‘>
      <group>Servants</group>
    </item>
  </query>
</iq>

// 建议在收到 Roster Push 时作相应回复
<iq from=‘juliet@example.com/balcony‘
    id=‘a78b4q6ha463‘
    type=‘result‘/>

<iq from=‘juliet@example.com/chamber‘
    id=‘x81g3bdy4n19‘
    type=‘result‘/>

// 添加失败时,服务器一定会返回节错误,类型有很多
<iq id=‘ph1xaz53‘
    to=‘juliet@example.com/balcony‘
    type=‘error‘>
  <error type=‘auth‘>
    <forbidden xmlns=‘urn:ietf:params:xml:ns:xmpp-stanzas‘/>
  </error>
</iq>

更新联系人

更新操作与添加操作完全一样。

删除联系人

// 请求删除
<iq from=‘juliet@example.com/balcony‘
    id=‘hm4hs97y‘
    type=‘set‘>
  <query xmlns=‘jabber:iq:roster‘>
    <item jid=‘nurse@example.com‘ subscription=‘remove‘/>
  </query>
</iq>

// 删除成功
<iq id="hm4hs97y" 
    to="tklisa@blah.im/teemo" 
    type="result"/>

// 成功后会收到 Roster Push
<iq id="lx4314" 
    type="set">
  <query xmlns="jabber:iq:roster" ver="53">
    <item jid="tkdave@blah.im" subscription="remove"/>
  </query>
</iq>

// 建议在收到 Roster Push 时作相应回复
<iq from=‘juliet@example.com/balcony‘
    id=‘lx4314‘
    type=‘result‘/>

// 删除失败时,服务器一定会返回节错误,类型不清楚

删除联系人条目时服务器还会生成一些订阅相关的 presence 节点:

  1. 如果 subscribe,则发送 unsubscribe,用来取消订阅用户;
  2. 如果 subscribed,则发送 ubsubscribed,用来取消用户对自己的订阅;
  3. 如果 both,则发送两者。

XMPP Roster,布布扣,bubuko.com

XMPP Roster

标签:os   io   for   ar   div   amp   服务器   .net   

原文地址:http://www.cnblogs.com/kvmisc/p/3909085.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!