Вопрос

Я разрабатываю приложение чата в 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, поэтому Darser добавит новую комнату.

Так что у тебя есть:

NSMutableArray* rooms;

Ваш метод будет:

-(NSMutableArray*)getRooms {
    return _rooms;
}  
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top