gpt4 book ai didi

java - Smack 聊天创建两个线程

转载 作者:行者123 更新时间:2023-11-30 09:24:58 26 4
gpt4 key购买 nike

我在 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);
}

下面是我的监听器类,它处理传入的消息。它最初是在程序初始化时设置的,以便在登录后可以直接接收消息,并建立聊天。它也由 sendMessage 函数中的 messageListener 变量调用,您可以在上面看到。

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 中找到聊天对象?

最佳答案

您需要注册一个 ChatManagerListener 来监听传入的聊天,如 Incoming Chats 中所述文档中的部分。以这种方式创建的聊天中的监听器将接收传入的消息,假设它们使用相同的线程 ID 进行响应(并非所有客户端都使用线程 ID)。

顺便说一句,您正在按线程查找现有聊天,但这不是传入聊天的线程 ID。您显示的代码片段只会与您自己创建的聊天相匹配,因此每次发送消息时都没有必要设置消息监听器,您也可以只保留对它的引用一次是创造。

您必须从传入的聊天中检索线程 ID 才能正常工作,这是假设传入的聊天实际上有一个聊天 ID。

关于java - Smack 聊天创建两个线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15463121/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com