获取名单而不是组列表XMPP iOS Swift

时间:2015-09-28 06:59:32

标签: ios objective-c swift xmpp xmppframework

我是XMPP新手,我实施了ejabberd。我的本地主机名是  'Orange.local'有三个用户。一个是从我的simmulator以admin@orange.local登录的,另一个是来自iMessanger的mihir@orange.local。 我正在创建一个组

@IBAction func CreateGroupBtn(sender: UIButton)
{
     var roomJID = XMPPJID.jidWithString("testRoom@conference.orange.local")
     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("mihir@orange.local");
        sender.inviteUser(strInvitedUserName, withMessage: "greetings");

    }

房间已创建,我可以在群组中与mihir@orange.local聊天。 现在我想得到admin@orange.local的所有组名,我的意思是admin@orange.local是组成员的所有组(房间)。

我正在应用此代码获取组列表:

 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: "admin@orange.local")
        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="admin@orange.local" 
     to="admin@orange.local/35441594471443421711351344" 
     id="3F9B0234-0233-4DF0-9174-34CC82FF6B70" type="result">
       <query xmlns="jabber:iq:roster">
        <item subscription="both" jid="mihir@orange.local">
          <group>Buddies</group>
        </item>
        <item subscription="both" jid="kalpesh@orange.local">
        </item>
      </query>
    </iq>

我的第二个问题是当我获取所有组成员时它返回空数组这里是代码:

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

请帮助我获得所有团体和特定群体的成员。 提前谢谢,抱歉我的英语不好。

2 个答案:

答案 0 :(得分:0)

XMPP中的成员列表MUC不是当前可用用户的列表,它只是房间管理员用于不同房间权限/角色/附属关系的“访问控制列表”之一:房间所有者可以授予“成员”,“管理员” “,”所有者“对特定JID的骄傲,禁止他与”被抛弃“的关系,等等。 您需要跟踪发送到会议jid的presence个数据包,以获得实际的用户列表:XMPPRoom界面具有xmppRoomDidJoinxmppRoomDidLeave方法。

答案 1 :(得分:0)

我遇到了同样的问题,但我注意到即使我没有尝试查询房间列表,我收到的名单iq也到了。所以我想也许这是时间问题。 当我试图以5秒的小延迟发送房间查询时,它突然起作用。所以我假设在完成一些设置或连接过程后需要发送查询。