2011-07-11 43 views
0

我正在開發一個使用OpenFire和JsJAC的內部聊天系統。我想讓所有登錄的人自動成爲彼此的朋友,但由於沒有好的方法可以讓所有人都成爲朋友,所以我決定使用訂閱插件並將訂閱請求發送給不在名單上的任何人。訂閱插件自動接受請求。JsJAC認購請求與暱稱

這現在正在工作,但是我無法爲新名單條目設置暱稱。

這裏是我正在使用的代碼:

//Send friend request 
    var subscribe_packet = "<presence to='"+this.sender+"@"+chatManager.args()['domain']+"' from='"+chatManager.args()['username']+"@"+chatManager.args()['domain']+"' type='subscribe'>"; 
    subscribe_packet += "<nick xmlns='http://jabber.org/protocol/nick'>TestTest</nick>"; 
    subscribe_packet += "</presence>"; 

    console.log("Subscribe packet: "+subscribe_packet); 
    con._sendRaw(subscribe_packet); 

這給出下面的XML輸出作爲一個例子:

<presence to='[email protected]' from='[email protected]'><nick xmlns='http://jabber.org/protocol/nick'>TestTest</nick></presence> 

此發送訂閱請求,但要麼不發送的暱稱或者沒有被OpenFire正確解釋。

有什麼想法?

+0

原來這不是JsJac的問題。 Openfire似乎不遵循XEP-0172,特別是「包含訂閱請求的暱稱」。任何人都有解決方法嗎? –

回答

0

Jason,XEP 0172不涉及服務器採取的任何操作。你需要讓你的客戶處理暱稱。爲此,請在收到訂閱請求時檢查給定的暱稱,然後在將新訂閱的用戶添加到您的名單時使用此暱稱。

順便說一句:這是不是一個好主意,使用_sendRaw(這是一個私人的方法,因此_)。更乾淨的解決方案是使用getNickname和setNickname方法擴展JSJaCPresence原型。

1

這讓我永遠找不到!我正在使用xmpphp,但從jquery Strophe獲得瞭解決方案。

首先做的事:

<iq type='set' xmlns='jabber:client' id='9155:sendIQ'> 
     <query xmlns='jabber:iq:roster'> 
       <item jid='[email protected]' name='usernickname'/> 
     </query> 
</iq> 

其次:

<presence to='[email protected]' type='subscribe' xmlns='jabber:client'/> 

然後再次重命名:

<iq type='set' xmlns='jabber:client' id='9155:sendIQ'><query xmlns='jabber:iq:roster'><item jid='[email protected]' name='kafkav2RENAME'/></query></iq> 

希望這會有所幫助,因爲我用你使用相同的XML以上,並沒有奏效。