标签:os io for ar div amp 服务器 .net
名录设置操作包括创建、更新和删除联系人条目,语法上是一个从客户端发送到服务器的 IQ 节点,节点类型为 set,必须且只包含一个 item 节点,此 item 节点不应该包含 subscription 属性,除非 subscription 的值为 remove。
名录推送与名录设置类似,当创建、更新或删除联系人条目时由服务器发送到客户端。收到名录推送的时候应该发送给服务器一个类型为 result 或 error 的回复。
// 请求 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 节点:
标签:os io for ar div amp 服务器 .net
原文地址:http://www.cnblogs.com/kvmisc/p/3909085.html