2013-02-02 7 views
9

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

ユーザは招待状を受け取ったことをどのようにして知っていますか?どのように受け入れたり辞退したりすることで対応できますか?

チャットルームの招待状に直接対処するXMPPFrameworkにクラスが見つかりませんでした。 私の研究は、ユーザーがチャットルームへの招待を受信するたびに、xmmppStreamのデリゲートメソッドが呼び出されることをこう述べています。そのメッセージには

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

、私はそれが名前「招待」とNSXMLElementが含まれており、それが含まれている場合、私は送っているかどうかを確認ユーザーへのコールバック。それから私は、チャットルームの名前と同じ名前のチャットルームを作成し、そこからユーザーは招待状を受け取り、その新しく作成されたルームに入ります。それはうまく動作しますが、静かで効率的ではありません。 XMPPFrameworkで利用できるクラスがあるかどうかを知りたい場合は、チャットルームの招待状を個別に処理できるhereがあります。たとえば、招待状の検出、受諾、および辞退など。

ルーム名を抽出するための私のコード:部屋の招待状については

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

こんにちはヴィシャルメソッド内のコード

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

の下に追加し、私は同様の問題で立ち往生しています、あなたは私が知っているあなたが任意のソリューションやアプローチを見つけてみましょうくださいすることができこれとともに ?ありがとう – Mangesh

答えて

12

と低下し、実装XMPPMUCDelegateとそのメソッド-xmppMUC:didReceiveRoomInvitation:-xmppMUC:didReceiveRoomInvitationDecline:

部屋JIDを取得するには、[message from]を呼び出します。

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

ルーム委任クラスにXMPPRoomDelegateを実装し、delegate methodsの一部を実装して、ルーム内のメッセージの受信を処理します。

現在のところ、招待状に自動的に対応する方法はないようです。

更新:デリゲートのコールバックでは、JIDがパラメータとして使用され、セマンティクスが少し分かりました。

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

しかし、私はxmpproomを作成した後にのみxmpproomDelegateを実装できます。 xmpproomデリゲートメソッドは、招待状のコールバックを提供しません、私は彼らが着信メッセージと発信メッセージや特定の部屋のいくつかの他のものを扱うためだと思います。 –

+0

これは 'XMPPMUCDelegate'が必要です。 – paulmelnikow

+0

はい、どうやって招待状を受け入れますか?その部屋に入って、その部屋のすべての着信メッセージを処理するにはどうすればいいですか?私は同じ名前の部屋を作成し、私の質問に言及するようにその代理人のメソッドを実装する必要がありますか? –

-1

だけ

- (void)xmppStream:(XMPPStream *)sender didReceivePresence:(XMPPPresence *)presence ; 
method 
関連する問題