2011-12-23 21 views
1

XMPPサーバー(アンドロイドXMPPクライアント)に正常に接続できました。ユーザーにメッセージを送信できますが、同じユーザーからの応答は受信できません。XMPPリスナーを設定できません

私はこのようなメッセージを送信しています:

public void send_message(String message, String buddy) throws XMPPException { 
    buddy += "@localhost"; 

    /* send message to user */ 
    Log.w("Sending mesage " + message + " to user " + buddy, "0"); 
    chat = chatManager.createChat(buddy, messageListener); 
    chat.sendMessage(message); 
    } 

私はcreateChat機能へのMessageListenerを渡しています。 MessageListenerののクラスがある:

class XMPPMessageListener implements MessageListener { 
    private String from; 
    private String body; 

    public void processMessage(Chat chat, Message message) { 
    this.from = message.getFrom(); 
    this.body = message.getBody(); 
    Log.w("*****Received message" + body + " from " + from, "0*****"); 
    } 

} 

私は、次のデバッグ出力取得していたユーザにメッセージを送信する:中(

W/Sending mesage play to user [email protected]( 823): 0 
D/SMACK ( 823): 10:43:54 AM SENT (1156346368): <message id="vwaJX-15" to="[email protected]" from="[email protected]/Smack" type="chat"><body>test</body><thread>249ke0</thread></message> 
D/SMACK ( 823): 10:43:54 AM RCV (1156346368): <presence id="vwaJX-12" to="[email protected]/Smack" from="eleano" type="error"><error code="404" type="cancel"><remote-server-no 
D/SMACK ( 823): 10:43:54 AM RCV (1156346368): t-found xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"/></error></presence> 
D/SMACK ( 823): 10:43:54 AM RCV (1156346368): <presence id="vwaJX-14" to="[email protected]/Smack" from="test" type="error"><error code="404" type="cancel"><remote-server-not- 
D/SMACK ( 823): 10:43:54 AM RCV (1156346368): found xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"/></error></presence> 

と接続しているユーザーテストに表示されるメッセージ「テストを」この場合)。ユーザーeleanoからメッセージを送信しています。また、私たちの関数が実際に正常に呼び出されたことを示す、デバッグ出力 "mesage play to user test @ localhost"が画面に表示されていることがわかります。

eleanoするためのテストからのメッセージを受信すると、私はこれだけデバッグ出力を取得:

D/SMACK ( 823): 10:44:00 AM RCV (1156346368): <message id="58Fjj-64" to="[email protected]/Smack" from="[email protected]/Spark 2.6.3" type="chat"><body>yes</body><thread>0tlK7o< 
D/SMACK ( 823): 10:44:00 AM RCV (1156346368): /thread><x xmlns="jabber:x:event"><offline/><composing/></x></message> 

しかし、ユーザーのeleanoがメッセージを受信して​​いませんが。

Log.w("*****Received message" + body + " from " + from, "0*****"); 

が表示されているため、MessageListenerは決して呼び出されません。何故ですか?ドキュメントに書いてあるとおり、正しく設定しました。

アイデアを歓迎します。ありがとう。

答えて

1

ありがとうございました。あなたの見解では、チャットオブジェクト自体にリスナーを設定するのではなく、接続時にリスナーをセットアップして(そしてChar型のパッケージをリッスンする)ことができました。

私のコードは次のようになります。

Message m = new Message(buddy, Message.Type.chat); 
m.setBody(message); 
connection.sendPacket(m); 

そして、次のようなメッセージの受信:

/* packet listener: listen for incoming messages of type CHAT on the connection (whatever the buddy) */ 
    PacketFilter filter = new MessageTypeFilter(Message.Type.chat); 
    xmppManager.connection.addPacketListener(new PacketListener() { 
    public void processPacket(Packet packet) { 
     Message mes = (Message)packet; 
     Log.w("***"+mes.toString()+"***","0"); 
    } 
    }, filter); 

そして、それは作品を私はこのようなパッケージを送っています。私はユーザーにメッセージを送信し、それらをうまく受信することができます。

0

あなたの問題は、テストからのメッセージが別のスレッドIDを持っていることです。これは、異なるチャットに属するメッセージに相当します。 ChatManagerListenerを作成すると、新しいチャットが作成されたときに呼び出されます。私はなぜ返信メッセージが別のスレッドIDを持っているか分からない。

通常、会話はスレッドIDによって調整されます。これにより、2人のユーザー間で複数の同時会話が可能になります。つまり、一部のクライアントはスレッドIDをまったく使用しません。その場合、Smackは着信チャットメッセージを、既に存在する場合は同じJIDを持つ既存のチャットメッセージと一致させ、そうでない場合は新しいメッセージを作成します。

関連する問題