标签: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