10

XMPPFrameworkを使用してMUCを作成し、以下のコードを使用してその部屋に参加するためのユーザー招待リクエストを送信できます。

// 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

そのメッセージで、「invite」という名前の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];
}
4

2 に答える 2

14

ルームへの招待と辞退については、実装XMPPMUCDelegateとそのメソッド-xmppMUC:didReceiveRoomInvitation:および-xmppMUC:didReceiveRoomInvitationDecline:.

ルームの JID を取得するには、 を呼び出し[message from]ます。

ルームに参加するには、 をインスタンス化してXMPPRoomを呼び出し-joinRoomUsingNickname:history:ます。

次に、ルーム デリゲート クラスXMPPRoomDelegateに を実装させ、いくつかのデリゲート メソッドを実装して、ルームでのメッセージの受信を処理します。

現在、招待に応答するより自動的な方法はないようです。

更新:デリゲート コールバックは、ルーム JID をパラメータとして受け取るようになり、セマンティクスが少し明確になりました。

- (void)xmppMUC:(XMPPMUC *)sender roomJID:(XMPPJID *) roomJID didReceiveInvitation:(XMPPMessage *)message;
- (void)xmppMUC:(XMPPMUC *)sender roomJID:(XMPPJID *) roomJID didReceiveInvitationDecline:(XMPPMessage *)message;
于 2013-02-02T19:42:46.137 に答える
-1

以下のコードを追加するだけです

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

メソッド内

 - (void)xmppStream:(XMPPStream *)sender didReceivePresence:(XMPPPresence *)presence ;
method
于 2014-04-10T13:05:30.877 に答える