2013-02-02 18 views
9

Jestem w stanie utworzyć MUC za pomocą XMPPFramework i wysłać zaproszenia do zaproszeń użytkownika, aby dołączyć do tego pokoju, używając poniższego kodu.Przyjmowanie zaproszenia do czatu

// 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:@"[email protected]"] withMessage:@"Come Join me"]; 

jaki sposób użytkownik „abc” wie, że otrzymał zaproszenie i jak może reagować na to albo przyjmując lub odrzucając?

Nie mogłem znaleźć żadnej klasy w XMPPFramework, która dotyczyłaby bezpośrednio zaproszenia do pokoju rozmów. Moje badania mówi, że gdy użytkownik otrzymuje zaproszenie pokoju, metoda delegata xmmppStream nazywa:

- (void)xmppStream:(XMPPStream *)sender didReceiveMessage:(XMPPMessage *)message 

W tej wiadomości, sprawdzić, czy zawiera ona NSXMLElement z nazwą „zapraszać”, a jeżeli zawiera on wtedy wysyłam wywołanie zwrotne do użytkownika. Następnie utworzę czat z tą samą nazwą, co nazwa czatu, z którego użytkownik otrzymał zaproszenie, i wprowadzę nowo utworzony pokój. Działa dobrze, ale cicho długo i nie jest cicho wydajny. Chcę wiedzieć, czy dostępna jest klasa XMPPFramework here, która może obsługiwać zaproszenie do pokoju rozmów na czacie oddzielnie. Na przykład wykrywanie, akceptowanie i odrzucanie zaproszeń do pokoju.

Mój kod do wydobywania nazwę pomieszczenia:

- (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]; 
} 
+0

Cześć Vishal, siedzę w podobny problem, można proszę dać mi znać Czy znaleziono żadnego rozwiązania lub podejścia z tym ? Dzięki – Mangesh

Odpowiedz

12

zaproszeń pokoju i spada, wdrożyć XMPPMUCDelegate i jej metody -xmppMUC:didReceiveRoomInvitation: i -xmppMUC:didReceiveRoomInvitationDecline:.

Aby uzyskać pokój JID, należy wywołać [message from];

Aby dołączyć do pokoju, stwórz instancję XMPPRoom i wywołaj -joinRoomUsingNickname:history:.

Następnie prześlij do pokoju pokój klasy XMPPRoomDelegate i zaimplementuj niektóre z delegate methods, aby odbierać wiadomości w pokoju.

Wygląda na to, że obecnie nie ma bardziej automatycznego sposobu odpowiadania na zaproszenia.

Aktualizacja: Odsyłające wywołania otrzymują teraz JID pomieszczenia jako parametr, który trochę wyjaśnia semantykę.

- (void)xmppMUC:(XMPPMUC *)sender roomJID:(XMPPJID *) roomJID didReceiveInvitation:(XMPPMessage *)message; 
- (void)xmppMUC:(XMPPMUC *)sender roomJID:(XMPPJID *) roomJID didReceiveInvitationDecline:(XMPPMessage *)message; 
+0

Mogę tylko zaimplementować xmpproomDelegate po utworzeniu xmpproom. Metody delegatów xmpproom nie zapewniają żadnego połączenia z zaproszeniem do pokoju, ponieważ są one przeznaczone tylko do obsługi wiadomości przychodzących i wychodzących oraz niektórych innych rzeczy z danego pokoju. –

+0

Do tego potrzebujesz 'XMPPMUCDelegate'. – paulmelnikow

+0

tak, ale jak mogę przyjąć zaproszenie? W jaki sposób mogę wejść do tego pokoju i obsłużyć wszystkie wiadomości przychodzące z tego pokoju? Czy muszę utworzyć pokój o tej samej nazwie, a następnie zaimplementować metody delegatów, o których wspomniałem w pytaniu? –

-1

wystarczy dodać poniżej kodu

if ([presenceType isEqualToString:@"subscribe"]) { 

    [_chatDelegate newBuddyOnline:[NSString stringWithFormat:@"%@@%@", presenceFromUser, @"localhost"]]; 
    NSLog(@"presence user wants to subscribe %@",presenceFromUser); 

    [xmppRoster acceptPresenceSubscriptionRequestFrom:[presence from] andAddToRoster:YES]; 

//For reject button 
//  [xmppRoster rejectPresenceSubscriptionRequestFrom:[tmpPresence from]];   
} 

wewnątrz metody

- (void)xmppStream:(XMPPStream *)sender didReceivePresence:(XMPPPresence *)presence ; 
method 
Powiązane problemy