Java 用の Smack メッセージング ライブラリで適切なチャットを確立できません。チャットがローカルで開始された場合は問題なく動作しますが、チャットが別のクライアントから開始された場合は、必要な 1 つのスレッドだけではなく、2 つの異なるチャット スレッドが作成されます。メッセージを送信するための私のコードは次のとおりです。
public void sendMessage(String input) throws XMPPException
{
Chat chat = connection.getChatManager().getThreadChat("test@server");
if(chat != null)
{
System.out.println("Chat exists!");
chat.addMessageListener(messageListener);
}
else
{
System.out.println("Create new chat");
chat = connection.getChatManager().createChat("test@server", "test@server", messageListener);
System.out.println(chat.getThreadID());
}
chat.sendMessage(input);
}
以下に、着信メッセージを処理するリスナー クラスを示します。ログイン直後にメッセージを受信し、チャットを確立できるように、プログラムが初期化されたときに最初に設定されます。上記の関数のmessageListener
変数によっても呼び出されます。sendMessage
class MyMessageListener implements MessageListener {
@Override
public void processMessage(Chat chat, Message message) {
String from = message.getFrom();
String body = message.getBody();
System.out.println(chat.getThreadID());
System.out.println(String.format("Received message '%1$s' from %2$s", body, from));
}
}
私は Smack ライブラリに非常に慣れていないため、利用可能なドキュメントと例が少し曖昧です。チャットが別のクライアントで作成されたかどうかを確認し、このチャットのスレッド ID を何らかの方法で取得する方法、またはメッセージを送信したユーザーの名前を知ることで ChatManager からチャット オブジェクトを見つける方法について、だれかが教えてくれますか?