Как получить список комнат, к которым присоединился данный пользователь в xmpp?

Я разрабатываю приложение чата, используя xmpp ejabberd. Я хочу разработать групповой чат XMPP, похожий на приложение Whats. Настройка группового чата XMPP выполняется на моем сервере XMPP. Я успешно создаю комнату и присоединяюсь к ней. Но я хочу комнаты, в которых я присоединился. Я использую следующий iq для получения списка групп с сервера

NSString* server = @"conference.test.com"; 
XMPPJID *serverJID = [XMPPJID jidWithString:server];
XMPPIQ *iq = [XMPPIQ iqWithType:@"get" to:serverJID];
[iq addAttributeWithName:@"from" stringValue:[[APP_DELEGATE xmppStream] myJID].full];
NSXMLElement *query = [NSXMLElement elementWithName:@"query"];
[query addAttributeWithName:@"xmlns" stringValue:@"http://jabber.org/protocol/disco#items"];
[iq addChild:query];
[[APP_DELEGATE xmppStream] sendElement:iq];

из приведенного выше кода я получаю список групп со своего сервера, но мне нужен список групп, к которым я присоединился, или групп, от которых я получил приглашение.

Код для создания и присоединения к комнате выглядит следующим образом

-(void) CreateRoom:(NSString *)roomJid {


static dispatch_once_t queueCreationGuard;
static dispatch_queue_t queue;
dispatch_once(&queueCreationGuard, ^{
    queue = dispatch_queue_create("com.something.myapp.backgroundQueue", 0);
});

XMPPRoomMemoryStorage *roomStorage = [[XMPPRoomMemoryStorage alloc] init];
XMPPJID *roomJID = [XMPPJID jidWithString:roomJid];
XMPPRoom *xmppRoom = [[XMPPRoom alloc] initWithRoomStorage:roomStorage jid:roomJID dispatchQueue:queue];
[xmppRoom activate:[self xmppStream]];
[xmppRoom addDelegate:self
        delegateQueue:queue];

NSXMLElement *history = [NSXMLElement elementWithName:@"history"];
[history addAttributeWithName:@"maxstanzas" stringValue:@"0"];

[xmppRoom joinRoomUsingNickname:[self xmppStream].myJID.user
                        history:history
                       password:nil];
}


- (void)xmppRoomDidCreate:(XMPPRoom *)sender
 {
    NSLog(@"Room Created");
 }
 - (void)xmppRoomDidJoin:(XMPPRoom *)sender
{
    NSLog(@"Room Joined");
}

Если у кого-то есть решение, пожалуйста, ответьте на вопрос. Спасибо


person swapnali patil    schedule 01.04.2016    source источник
comment
как тебе это удалось?   -  person Mário Carvalho    schedule 13.05.2016


Ответы (1)


Вы можете использовать это: (Swift 3.0)

    var muc = XMPPMUC(dispatchQueue: DispatchQueue.main)
    muc?.activate(stream) //Here stream is the XMPPStream
    muc?.addDelegate(self, delegateQueue: DispatchQueue.main)
    muc?.discoverRooms(forServiceNamed: "conference.localhost")

ИЛИ вы можете использовать это:

let xmlstring: String = String("<query xmlns='http://jabber.org/protocol/disco#items'/>")
let newQuery = try! DDXMLElement(xmlString: xmlstring)
let newIq = XMPPIQ(type: "get", to: XMPPJID(string:"conference.localhost"), elementID: stream.generateUUID(), child: newQuery)
stream.send(newIq)
person KSR    schedule 17.02.2017
comment
Я использую XMPPMUC для обнаружения комнат, но не получаю никаких комнат. - person Jasmit; 25.02.2021