2011-06-27 10 views
4

私はOpenfireサーバーに接続するためにXMPP smack apiを使用しています。私は、事前に部屋の名前を知らずに利用可能なすべてのパブリックルームを返すようにサーバーに照会しようとしています。これは私のクライアントが使用可能なすべてのパブリックルームのリストを表示し、それに応じて参加できるようにすることです。 Smack Extensions Documentationは、サーバーからルーム情報を返すいくつかの例を示していますが、どれも自分のニーズに合っていないようです。smack api openfireサーバー上のすべての公開ルームを取得

この例では、部屋の名前を事前に知っておく必要があります。これは、他の人が知り得ない空き部屋を表示したい場合には好ましくありません。この例のコードは次のとおりです。

// Discover information about the room [email protected] 
    RoomInfo info = MultiUserChat.getRoomInfo(conn, "[email protected]"); 
    System.out.println("Number of occupants:" + info.getOccupantsCount()); 
    System.out.println("Room Subject:" + info.getSubject()); 

別の例は、あなたはすべての連絡先が現在いる部屋を照会することができます。これは、部屋の名前を得るための非常に間接的な方法のようだと部屋の一部を除外する可能性を秘めています。 XMPPはサーバベースのプロトコルであり、P2Pベースのプロトコルではないので、これを達成する最も論理的な方法ではないようです(私が間違っていれば修正してください)。誰かが私のリンクを送信したり、それが非常に高く評価されるだろうこれを実現する方法の例を提供してください可能性がいずれかの場合

Iterator joinedRooms = MultiUserChat.getJoinedRooms(conn, "[email protected]/Smack"); 

を次のようにこのコード例はあります。

答えて

2

MultiUserChat.getHostedRooms()はあなたが探しているものです。

+0

完全に機能してくれてありがとう、私は例でそれを見ていないし、jdocsでそれを見落としているに違いありません。 – pat8719

+1

私はhostedroomsがユーザーが作成した部屋を送信する必要がありますが、そのユーザーが参加しているがホストされていない部屋については何かと思います ' – ozmank

+0

@ozmankそのために 'getJoinedRooms'を使用してください –