当前位置: 首页 > 知识库问答 >
问题:

我想使用smack(非群聊)接收所有用户的消息

宦瀚
2023-03-14

我正在创建一个聊天应用程序,一对一的聊天正常工作,但是当涉及到多用户聊天时,我无法收听他们的消息,我使用smack实现XMPP协议,这是代码

服务器配置部分是

    public void serverCongig() throws XMPPException {
     
    LOGGER.info(String.format("Initializing connection to server %1$s port 
       %2$d", server, port));
    SmackConfiguration.setPacketReplyTimeout(packetReplyTimeout);
    config = new ConnectionConfiguration(server, 
        port,PropertyReader.getPropertiesValue("server_domain"));
 //        config.setSASLAuthenticationEnabled(false);
    config.setSecurityMode(ConnectionConfiguration.SecurityMode.disabled);
     
    connection = new XMPPConnection(config);
    try
    {
       connection.connect();
        LOGGER.info("Connected: " + connection.isConnected()+" Service 
         name"+connection.getServiceName());
        chatManager = connection.getChatManager();
        messageListener = new MyMessageListener();
    }
    catch(Exception e)
    {
                    callThread();
     
        e.printStackTrace();
    }
      finally
    {
        callThread();
    }
   
     
}

消息侦听部分是MyMessageListener类实现的MessageListener{

    @Override
    public void processMessage(Chat chat, Message message) {
        try
        {
        String from = message.getTo();
        String body = message.getBody();
        String toUser="";
        LOGGER.info(String.format("Received message '%1$s' from %2$s", body, from));
        String[] user=from.split("@");
        for(int i=0;i<user.length;i++)
         toUser=user[0];
        LOGGER.info("Receiver Phone number"+toUser); 
        SendMsgToWhatsapp create=new SendMsgToWhatsapp();
        try {
            if(!body.equalsIgnoreCase(null))
            {
              create.processWhatsappMessage(toUser, body);

            }
        } catch (Exception ex) {
            callThread();

//Logger.get记录器(XmppManager.class.getName()). log(Level.SEVERE,空,前); } } 捕获(异常e){e.printStackTrace();调用线程(); } }

共有1个答案

施彦
2023-03-14

我有一个类似的问题,这就是我发现的:XEP-0313:消息归档管理(https://xmpp.org/extensions/xep-0313.html)介绍如何使用邮件存档。

在smack中,你可以这样使用它

  MamManager mamManager = MamManager.getInstanceFor(connection);
        MamManager.MamQueryArgs mamQueryArgs = MamManager.MamQueryArgs.builder()
                .limitResultsToJid(jid)
                .setResultPageSizeTo(10)
                .queryLastPage()
                .build();
        MamManager.MamQuery mamQuery = mamManager.queryArchive(mamQueryArgs);
        List<Message> messages = mamQuery.getMessages();

        for (Message m : messages) {
            System.out.println(m.getBody());
        }

但当我尝试使用它时,我在maven中遇到了依赖性问题,所以我从dailybuilds手动加载了smack jar(https://download.igniterealtime.org/smack/dailybuilds/smack-SNAPSHOT-2020-07-21.zip)以及通过maven添加的其余依赖项

在我的情况下,它的工作。

https://download.igniterealtime.org/smack/docs/latest/javadoc/org/jivesoftware/smackx/mam/package-summary.html(smackx.mam javadoc)

 类似资料:
  • 我知道我们可以通过聊天聊天=muc2.create私人聊天(“myroom@conference.jabber.org /johndoe”);chat.send消息(“你好”);在留档中给出。 但是我没有找到公开和群里所有用户聊天的方法。任何想法? 提前谢谢。

  • 概述 为了能够让轻应用订阅号的开发者接收到用户在消息窗口的留言消息,开发者可以在管理后台设置消息服务器并开启接收用户对话消息模式。 设置消息服务器时接需要提供可用的接收消息的回调URL地址,为了让通信更加安全,建议使用https。 设置成功并开启了接收对话消息模式后,用户在轻应用或订阅号窗口里发送的消息会推送给设置的URL,服务器接收到消息后,可以通过异步发送消息接口给用户回复消息。 设置消息服务

  • 我一直在努力通过Smack和Openfire服务器与XMPP聊天。我的问题如下: 每当一个用户向另一个用户发送消息时,该消息就会在另一个用户处正确接收。但是任何回复都不会出现在第一条消息的发件人处。因此,用户1成功地发送给用户2。然后,用户2无法向用户1发送任何回复。另一方面,如果我重新启动并让用户再次登录,则用户2可以发送给用户1,但反之亦然。 我想说的是,只有聊天的发起者才能发送消息,接收者不

  • 为此他必须加入由用户A1创建的相同twilio通道,然后才能加载消息。 这就是我被困住的地方。 用户A2如何发现用户A1或任何其他用户是否给他发送了一些消息,并且他还需要知道他需要加入哪个通道来加载发送的消息。 https://github.com/philnash/twilio-chat-kendo-react 更新: 使用这个- 这就是我面临的问题。

  • 我有一个名为“test-topic”的主题,有3个分区。 当我启动一个将group-id设置为“test-group”的使用者(consumer-1)时,它连接并读取主题上的所有分区。到目前为止还好。 当我在同一个组中启动另一个消费者(consumer-2)时,问题就出现了。我希望在两个消费者之间划分分区时能够重新平衡,例如,消费者-1得到分区0和2,消费者-2得到分区1。这种情况不会发生,当然我

  • 为了使用Kafka通用地发布消息,我使用类名作为主题: 服务器属性(我从默认属性中唯一更改的内容): 注意:我还尝试了以下用户设置: