PingManager.java

 1package eu.siacs.conversations.xmpp.manager;
 2
 3import android.content.Context;
 4import androidx.annotation.NonNull;
 5import com.google.common.util.concurrent.FutureCallback;
 6import com.google.common.util.concurrent.Futures;
 7import com.google.common.util.concurrent.MoreExecutors;
 8import eu.siacs.conversations.xmpp.XmppConnection;
 9import eu.siacs.conversations.services.XmppConnectionService;
10import im.conversations.android.xmpp.model.ping.Ping;
11import im.conversations.android.xmpp.model.stanza.Iq;
12import java.util.concurrent.TimeoutException;
13
14public class PingManager extends AbstractManager {
15
16    public PingManager(final XmppConnectionService context, final XmppConnection connection) {
17        super(context, connection);
18    }
19
20    public void ping() {
21        if (connection.getStreamFeatures().sm()) {
22            this.connection.sendRequestStanza();
23        } else {
24            this.connection.sendIqPacket(new Iq(Iq.Type.GET, new Ping()));
25        }
26    }
27
28    public void ping(final Runnable runnable) {
29        final var pingFuture = this.connection.sendIqPacket(new Iq(Iq.Type.GET, new Ping()));
30        Futures.addCallback(
31                pingFuture,
32                new FutureCallback<Iq>() {
33                    @Override
34                    public void onSuccess(Iq result) {
35                        runnable.run();
36                    }
37
38                    @Override
39                    public void onFailure(final @NonNull Throwable t) {
40                        if (t instanceof TimeoutException) {
41                            return;
42                        }
43                        runnable.run();
44                    }
45                },
46                MoreExecutors.directExecutor());
47    }
48}