Я могу создать MUC с помощью XMPPFramework и отправить пользователям запросы на приглашение присоединиться к этой комнате, используя приведенный ниже код.
// Creating
AppDelegate *dele =(AppDelegate *) [[UIApplication sharedApplication]delegate];
xmppRoom = [[XMPPRoom alloc] initWithRoomStorage:dele jid:[XMPPJID jidWithString:self.roomName] dispatchQueue:dispatch_get_main_queue()];
[xmppRoom addDelegate:dele delegateQueue:dispatch_get_main_queue()];
[xmppRoom activate:dele.xmppStream];
[xmppRoom joinRoomUsingNickname:self.myNick history:nil];
// Inviting
[xmppRoom inviteUser:[XMPPJID jidWithString:@"abc@host"] withMessage:@"Come Join me"];
Как пользователь «abc» узнает, что он получил приглашение, и как он может на него отреагировать, приняв или отклонив приглашение?
Я не смог найти ни одного класса в XMPPFramework, который напрямую связан с приглашением в чат. Мои исследования показывают, что всякий раз, когда пользователь получает приглашение в чат, вызывается метод делегата xmmppStream:
- (void)xmppStream:(XMPPStream *)sender didReceiveMessage:(XMPPMessage *)message
В этом сообщении я проверяю, содержит ли он NSXMLElement с именем «пригласить», и если он содержит, то я отправляю пользователю обратный вызов. Затем я создаю чат с тем же именем, что и чат, из которого пользователь получил приглашение, и вхожу в эту вновь созданную комнату. Работает нормально, но тихо долго и не тихо эффективно. Я хочу знать, есть ли класс в XMPPFramework, доступный здесь, который мог бы отдельно обрабатывать приглашение в чат. Например, обнаружение, принятие и отклонение приглашений в комнату.
Мой код для извлечения имени комнаты:
- (void)xmppStream:(XMPPStream *)sender didReceiveMessage:(XMPPMessage *)message
{
NSXMLElement * x = [message elementForName:@"x" xmlns:XMPPMUCUserNamespace];
NSXMLElement * invite = [x elementForName:@"invite"];
NSXMLElement * decline = [x elementForName:@"decline"];
NSXMLElement * directInvite = [message elementForName:@"x" xmlns:@"jabber:x:conference"];
NSString *msg = [[message elementForName:@"body"]stringValue];
NSString *from = [[[message attributeForName:@"from"]stringValue];
if (invite || directInvite)
{
[self createAndEnterRoom:from Message:msg];
return;
}
[self.delegate newMessageRecieved:msg];
}