我无法在 Java 的 Smack 消息传递库中建立正确的聊天。如果聊天是在本地开始的,它工作得很好,但是如果聊天是从另一个客户端开始的,那么会创建两个不同的聊天线程,而不仅仅是需要的一个。我发送消息的代码如下:
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 中找到聊天对象?