如何检查客户端是否连接到XMPP服务器

Rah*_*rma 2 android xmpp smack

我正在为Android和iPhone工作一个XMPP客户端.我已经能够连接到服务器并获取消息.

但客户端在几分钟后与XMPP服务器断开连接.IOS XMPP框架由委托方法组成,该方法指示客户端是否连接到服务器.如果连接未断开,那么我们可以使用委托方法重新连接.我在Android客户端(我正在使用aSmack库)中使用以下代码来检查是否存在连接.但这似乎不起作用.

public void recieveMessage()
{  

           Log.e("xmppclient","will receive messages");
           PacketFilter filter = new MessageTypeFilter(Message.Type.chat);
           connection.addPacketListener(new PacketListener() {

           public void processPacket(Packet packet) {
               if(connection != null && connection.isConnected()) 
               {
                   Message message = (Message) packet;
                   if (message.getBody() != null)
                        {
                   fromName = StringUtils.parseBareAddress(message.getFrom());
                   String messageBody=message.getBody();
                   Log.e("Message", messageBody );
                   Intent i = new Intent(NEW_MESSAGE);  
                   i.putExtra("username", StringUtils.parseBareAddress(message.getFrom()));
                   i.putExtra("message", message.getBody());
                   sendBroadcast(i);
                        }
                   else
                   {

                       connectToXmpp();
                   }
               }

            }

           }
   ,filter);
   }
Run Code Online (Sandbox Code Playgroud)

connectToXMPP()是打开新连接的方法.

一旦连接消失,有没有其他方法来检查连接并重新连接到XMPP ...... ???

Mic*_*ski 5

如上所述,您需要附加连接侦听器,如下所示:

Connection connection = (Connection)params[0];
connection.connect();

connection.addPacketListener(new PacketListener() {

                                 @Override
                                 public void processPacket(Packet packet) {
                                     System.out.println("Received message");
                                 }
                             }, new PacketFilter() {

                                 @Override
                                 public boolean accept(Packet packet) {
                                     System.out.println("Received message");
                                     return true;
                                 }
                             });

connection.addConnectionListener(new ConnectionListener() {
    @Override
    public void connectionClosed() {
        System.out.println("uhoh");
    }

    @Override
    public void connectionClosedOnError(Exception e) {
        System.out.println("uhoh");
    }

    @Override
    public void reconnectingIn(int i) {
        if(i < 4){
            //TODO notify
        }
    }

    @Override
    public void reconnectionSuccessful() {
        System.out.println("uhoh");
    }

    @Override
    public void reconnectionFailed(Exception e) {
        System.out.println("uhoh");
    }
});

connection.login("test2", "test");
Run Code Online (Sandbox Code Playgroud)