質問

XMPPFrameworkを使用して、iPhoneでチャットアプリケーションを開発しています。すべてがうまく機能していますが、その時点で立ち往生しています。すべてのパブリックルームのリストを取得したいのですが、XMPPFrameworkには方法が見つかりません。それで、誰かがこの問題を解決するために私を助けてくれますか?

役に立ちましたか?

解決

これがすべての部屋のリストを取得するためのコードです

NSString* server = @"chat.shakespeare.lit"; //or whatever the server address for muc is
XMPPJID *servrJID = [XMPPJID jidWithString:server];
XMPPIQ *iq = [XMPPIQ iqWithType:@"get" to:servJID];
[iq addAttributeWithName:@"from" stringValue:[xmppStream myJID].full];
NSXMLElement *query = [NSXMLElement elementWithName:@"query"];
[query addAttributeWithName:@"xmlns" stringValue:@"http://jabber.org/protocol/disco#items"];
[iq addChild:query];
[xmppStream sendElement:iq];

特定のユーザーの部屋を取得するコードがある場合は、共有してください

他のヒント

このコードを使用してサーバーを直接照会しますが、それが最良の方法であるかどうかはわかりません。

 XMPPIQ *iq = [[XMPPIQ alloc] initWithType:@"get"];
 NSString* conferenceHost = [NSString stringWithFormat:@"conference.%@", _xmppStream.hostName];
[iq addAttributeWithName:@"from" stringValue:conferenceHost];
[iq addAttributeWithName:@"to" stringValue:_host];
DDXMLElement *query = [DDXMLElement elementWithName:@"query" xmlns:@"http://jabber.org/protocol/disco#items"];
[iq addChild:query];
[_xmppStream sendElement:iq];

これが誰かを助けることを願っています。

ちなみに、このソリューションを採用する場合は、代表団の方法を実行する必要があります。

 - (BOOL)xmppStream:(XMPPStream *)sender didReceiveIQ:(XMPPIQ *)iq {
  }  

私は最善の方法が、接続が開始されたらメソッドを解析することです。

- (void)xmppStream:(XMPPStream *)sender didReceivePresence:(XMPPPresence *)presence {
    /* parse */
}

次に、確認します

  [[sender] from] domain]

「会議」が含まれている場合。その後、送信者は部屋であると考えることができ、最後にnsmutablearrayに追加することができます。また、新しい部屋が作成されると、DidreceivePresenceが呼び出されるため、パーサーが新しい部屋を追加します。

だから、あなたは持っています:

NSMutableArray* rooms;

あなたの方法は次のとおりです。

-(NSMutableArray*)getRooms {
    return _rooms;
}  
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top