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

时间:2016-06-28 12:45:34

标签: ios xmpp openfire xmppframework

服务器是Openfire,运行自定义组件,Client是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发送在线节,而没有提及presence.type(可用)到房间jid以及location元素。

用户2未收到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中的任何一个离开了房间,那么为什么server_comp也会获得不可用的存在,尽管comp本身不是房间的一部分?是不是因为server_comp代表user1邀请User2?

1 个答案:

答案 0 :(得分:0)

我知道我无法完全回答你的问题,但有很多事情需要讨论:我是java开发人员,我也是iOS用户,但我不知道xmpp是什么意思的iOS。

通常,没有机制来验证OPENFIRE中的任何XML ,因此您可以根据需要修改任何XML。 由于Openfire与XML Pull Parser库配合使用,因此 safe 可以将新属性添加为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

更多:存在主要通过名册传递,但我认为你在谈论群聊。在groupchats中,有一种ping用户的机制似乎是透明的,会议服务在几分钟内就有一个参数可以让用户保持空闲状态(默认值:30,但也有#34;从不&#34;)。 Openfire在他的网络控制台中提供此功能(groupchats - &gt; Groupchat设置 - &gt;选择会议服务 - &gt;其他设置)。

在群聊中,ping不是强制性的,但您作为开发人员可以这样做。