سؤال

أقوم بتطوير تطبيق دردشة في iPhone باستخدام XMPPframework. كل شيء يعمل بشكل رائع ولكنه عالق في هذه النقطة. أرغب في استرداد قائمة بجميع الغرف العامة ولكن لا توجد طريقة موجودة في 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 ، لذلك سيضيف Parser الغرفة الجديدة.

لذلك ، لديك:

NSMutableArray* rooms;

ستكون طريقتك:

-(NSMutableArray*)getRooms {
    return _rooms;
}  
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top