Pergunta

Estou desenvolvendo um aplicativo de bate -papo no iPhone usando o xmppframework. Tudo está funcionando muito bem, mas preso no ponto. Quero recuperar uma lista de todas as salas públicas, mas não há um método encontrado no XMPPFRameWork. Então, alguém pode me ajudar a resolver esse problema?

Foi útil?

Solução

Aqui está o código para obter a lista de todos os quartos

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];

Se você tiver código para obter o quarto de usuário específico, compartilhe -o

Outras dicas

Eu uso este código para consultar diretamente o servidor, mas não tenho certeza se essa é a melhor maneira.

 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];

Espero que isso ajude alguém.

A propósito, se você adotar esta solução, precisará fazer alguma análise no método delegado:

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

Eu sou a melhor maneira de analisar o método assim que a conexão é iniciada:

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

Então você verifica

  [[sender] from] domain]

se contém "conferência". Então você pode pensar que o remetente é uma sala e, finalmente, você pode adicionar ao NSMutableArray, por exemplo. Além disso, quando uma nova sala será criada, o DidReceivePresence será chamado, para que o Parser adicionará a nova sala.

Então você tem:

NSMutableArray* rooms;

Seu método será:

-(NSMutableArray*)getRooms {
    return _rooms;
}  
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top