2015-09-28 14 views
1

我是XMPP的新手,我實現了ejabberd。我的本地主機名是 'Orange.local'有三個用戶。一個從我的模擬器以[email protected]身份登錄,第二個從iMessanger以[email protected]登錄。 我創建一個組被創建獲取名單而不是組名單XMPP iOS Swift

@IBAction func CreateGroupBtn(sender: UIButton) 
{ 
    var roomJID = XMPPJID.jidWithString("[email protected]") 
    var roomMemoryStorage = XMPPRoomMemoryStorage() 
    var xmppRoom = XMPPRoom(roomStorage: roomMemoryStorage, jid: roomJID, dispatchQueue: dispatch_get_main_queue()) 
    xmppRoom.activate(xmppStream()) 
    xmppRoom.addDelegate(self, delegateQueue: dispatch_get_main_queue()) 
    xmppRoom.joinRoomUsingNickname("admin", history: nil); 
} 

func xmppRoomDidCreate(sender: XMPPRoom!) 
{ 
    println("room created \(sender.description)"); 
} 

func xmppRoomDidJoin(sender: XMPPRoom!) { 
     println("romm joined") 
     sender.fetchConfigurationForm() 
     sender.configureRoomUsingOptions(nil) 
     sender.fetchMembersList(); 

     sender.sendMessageWithBody("null"); 
     var strInvitedUserName = XMPPJID.jidWithString("[email protected]"); 
     sender.inviteUser(strInvitedUserName, withMessage: "greetings"); 

    } 

房間,我能夠在組[email protected]聊天。 現在我想要得到所有組的名稱[email protected]我的意思是所有組(房間)其中[email protected]是組的成員。

我申請這個代碼來獲取組列表:

override func viewDidLoad() 
{ 
     super.viewDidLoad() 

     var server = "conference.orange.local"; 
     var id = xmppStream().generateUUID(); 
     var serverJID = XMPPJID.jidWithString(server) 
     var iq = XMPPIQ.iqWithType("get", to: serverJID, elementID: id) 
     iq.addAttributeWithName("from", stringValue: "[email protected]") 
     var query = DDXMLElement.elementWithName("query") as! DDXMLElement; 
     query.addAttributeWithName("xmlns", stringValue: "http://jabber.org/protocol/disco#items") 
     iq.addChild(query); 
     xmppStream().addDelegate(self, delegateQueue: dispatch_get_main_queue()) 
     xmppStream().sendElement(iq); 
} 

但我正在逐漸名冊響應這樣的:

<iq xmlns="jabber:client" from="[email protected]" 
    to="[email protected]/35441594471443421711351344" 
    id="3F9B0234-0233-4DF0-9174-34CC82FF6B70" type="result"> 
     <query xmlns="jabber:iq:roster"> 
     <item subscription="both" jid="[email protected]"> 
      <group>Buddies</group> 
     </item> 
     <item subscription="both" jid="[email protected]"> 
     </item> 
     </query> 
    </iq> 

和我的第二個問題是,當我取回所有組成員它返回空陣列這裏是代碼:

func xmppRoom(sender: XMPPRoom!, didFetchMembersList items: [AnyObject]!) { 
     println("members= \(items)"); 
    } 

請幫助我得到所有組和成員關節組。 在此先感謝並對我的英語不好。

+0

你能指導我設置ejabbered嗎? –

+0

在這裏你可以找到安裝程序的最佳教程。 :http://code.tutsplus.com/tutorials/building-a-jabber-client-for-ios-server-setup--mobile-6958 –

+0

我陷入了同樣的境地。你有任何解決方案.. –

回答

0

XMPP中的成員列表MUC不是當前可用用戶的列表,它只是房間管理員用於區分房間特權/角色/從屬關係的「訪問控制列表」之一:房主可授予「成員」,「管理員「,」所有者「privelegy到特定的JID,禁止他與」棄用「從屬關係等。 您需要跟蹤presence發送到會議jid的數據包纔能有實際的用戶列表:XMPPRoom接口有xmppRoomDidJoinxmppRoomDidLeave方法。

0

我有同樣的問題,但我注意到,即使我沒有試圖查詢房間列表時,我收到的名單iq即將到達。所以我想也許這是一個計時的事情。 當我試圖發送5秒鐘的延遲房間查詢時,它突然工作。所以我假設查詢需要在完成一些設置或連接過程後發送。