簡體   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