繁体   English   中英

将自定义编辑的状态发送到XMPP MUC会议室

[英]Sending custom edited presence to XMPP MUC room

服务器是运行自定义组件的Openfire,客户端是iOS

1> User1 authenticates and then creates room1 and then sends a
presence to server_comp

2> Server_comp invites User2 to join room1 on behalf of User1

3> User2 accepts the invitation and joins the room.

4> All the message stanza conversation continues well.

我想在User1客户端发生位置坐标更改时通知User2。 我想通过状态节来做到这一点。

现在,User1发送出席状态节,而未提及到房间jid中的present.type(可用)以及location元素。

User2不会收到从User1到房间的在线状态节。

我已经实现了这个代表,但这从未实现。 该委托人有什么用?

-(void)xmppRoom:(XMPPRoom *)sender occupantDidUpdate:(XMPPJID *)occupantJID withPresence:(XMPPPresence *)presence {
  NSLog(@"%@ updated status with presence %@",[occupantJID full], presence.debugDescription);
 }

如果我发送默认状态,如不可用的类型等,它工作正常。 我提到了XMPP定书和其他在线文档,但找不到任何帮助。

现在,我的理解是,房间本身只是简单地忽略了自定义编辑(向状态添加位置属性)状态。 MUC可能会忽略其他不可理解元素的存在。 我的理解正确吗?

我还有第二个问题:

服务器组件邀请User2加入User1创建的会议室。 一旦user2加入会议室,那么一段时间后,如果user1 / user2中的任何一个离开会议室,那么为什么comp_本身不属于会议室,为什么server_comp也出现不可用的状态? 就像因为server_comp代表user1邀请User2吗?

我知道我无法完全回答您的问题,但是有很多事情要讨论:我是Java开发人员,也是iOS的开发人员,但我不知道适用于iOS的xmpp。

通常, 没有机制可以在OPENFIRE中验证任何XML ,因此您可以根据需要修改任何XML。 由于Openfire与XML Pull Parser库一起使用,因此可以安全地将新属性添加为LAST ONES。

因此,如果有消息,就像

<message>
<body attr1="value1" attr2="value2">
</body>
</message>

通过以下方式添加您的自定义标签:

<message>
<body attr1="value1" attr2="value2" customattr="customvalue">
</body>
</message>

因为XMLPullParser可处理属性的位置,所以如果在Openfire代码中可以直接访问位置( xml[1] ),则不会破坏任何功能。 关于标签顺序没有问题,只是不要包装原始的根标签,因此示例都可以:

<message>
<body attr1="value1" attr2="value2">
<customtagname xmlns="saffron.state:customaction"/>
</body>
</message>

<message>
<customtagname xmlns="saffron.state:customaction"/>
<body attr1="value1" attr2="value2">
</body>
</message>

但是,据我所知,XMPP规范确实非常灵活,因此,存在某种机制可以在客户端可以拦截的每个Stanza(= Packet)中或多或少地添加定义事件和自定义标签(在具有StanzaListener / Filter的Smack API中)。

最常见的元素是jabber:x:event( spec

  <x xmlns="jabber:x:event">
    <offline/>
    <delivered/>
    <displayed/>
    <composing/>

但是有扩展元素机制,可能正是您要添加功能的内容(请参见此处: Specification

更多:存在主要通过名册进行,但我认为您是在谈论小组聊天。 在小组讨论中,有一种ping用户的机制看起来很透明,会议服务在几分钟之内就具有一个参数来踢闲置的用户(默认值:30,但也没有)。 Openfire在他的Web控制台中提供了此功能(groupchats-> Groupchat设置->选择会议服务->其他设置)。

在小组讨论中,对聊天进行ping并不是强制性的,但是您作为开发人员可以做到。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM