2017-03-01 68 views
2

我正在开发一个使用服务器端作为OpenFire 3.9.3和客户端作为Smack 4.2的聊天应用程序。重新连接Smack后无法接收消息

我的问题:

  1. 如果用户关闭WIFI /移动数据然后重新连接动作将被发生。没关系。但OpenFire会话在客户端重新连接期间显示为在线。这是正常的行为吗?

  2. 虽然user1正在重新连接进程,并且如果user2将消息发送给user1,并且如果这些消息在重新连接成功后未传递给user1,是否有任何方法可以获取这些消息?

    重新连接处理时间的周期在OpenFire中被视为在线,因此这些消息不存储在脱机管理器中。

    请给我提供一些想法,重新连接Smack后接收消息。

+0

您是否在openfire服务器中启用了日志历史记录和存档设置? – OlaB

+0

感谢您的答复..启用..我可以在服务器端看到这些消息。但是如何从客户端取回。以及如何区分哪一个没有交付。 – Manikandan

+0

所以我会给你一个如何设置连接功能的实例,你登录 – OlaB

回答

0

这是我上面你如何设置一个收听者做出的评论在您登录后:

public void setConnection() { 
     if (connection != null) { 
      // Add a packet listener to get messages sent to us 
      PacketFilter filter = new MessageTypeFilter(Message.Type.chat); 
      connection.addPacketListener(new PacketListener() { 
       @Override 
       public void processPacket(Packet packet) { 
        Message m = (Message) packet; 
        if (m.getBody() != null) { 
         String fromName = StringUtils.parseBareAddress(m 
           .getFrom()); 

         logs.append("\n"); 
         logs.append(fromName + ": " + m.getBody()); 
         logs.append("\n"); 

        } 
       } 
      }, filter); 
     } 

    } 

如果你把这样的方法在您的登录监听器之后,或者无论你登录,你将获得所有离线消息。

+0

也尝试检查Openfire服务器>服务器设置>脱机消息,看看你的设置是否好。 – OlaB

+0

stanzalistener已经在登录后才能使用。和offlineManager在服务器端罚款。在重新连接成功后,我调用offlineManager返回了列表中的零..以及packetlistener不会返回那些发送方在接收方重新连接过程中发送消息的消息。例如:用户1在重新连接过程中在user2期间发送了消息。 – Manikandan

+0

也对你有疑问,当情况正常时(即没有网络重新连接),你会收到脱机消息吗?如果您正在讨论网络问题,那么我猜想它超出了您提到的设置,然后尝试设置连接操作而非登录操作的节, – OlaB