首页 > 代码库 > XMPP Roster
XMPP Roster
简介
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 节点:
- 如果 subscribe,则发送 unsubscribe,用来取消订阅用户;
- 如果 subscribed,则发送 ubsubscribed,用来取消用户对自己的订阅;
- 如果 both,则发送两者。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。