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.ListenableFuture;
 8import com.google.common.util.concurrent.MoreExecutors;
 9import eu.siacs.conversations.xmpp.Jid;
10import eu.siacs.conversations.xmpp.XmppConnection;
11import eu.siacs.conversations.services.XmppConnectionService;
12import im.conversations.android.xmpp.model.ping.Ping;
13import im.conversations.android.xmpp.model.stanza.Iq;
14import java.util.concurrent.TimeoutException;
15
16public class PingManager extends AbstractManager {
17
18    public PingManager(final XmppConnectionService context, final XmppConnection connection) {
19        super(context, connection);
20    }
21
22    public void ping() {
23        if (connection.getStreamFeatures().sm()) {
24            this.connection.sendRequestStanza();
25        } else {
26            this.connection.sendIqPacket(new Iq(Iq.Type.GET, new Ping()));
27        }
28    }
29
30    public ListenableFuture<Iq> ping(final Jid address) {
31        final var iq = new Iq(Iq.Type.GET, new Ping());
32        iq.setTo(address);
33        return this.connection.sendIqPacket(iq);
34    }
35
36    public void ping(final Runnable runnable) {
37        final var pingFuture = this.connection.sendIqPacket(new Iq(Iq.Type.GET, new Ping()));
38        Futures.addCallback(
39                pingFuture,
40                new FutureCallback<Iq>() {
41                    @Override
42                    public void onSuccess(Iq result) {
43                        runnable.run();
44                    }
45
46                    @Override
47                    public void onFailure(final @NonNull Throwable t) {
48                        if (t instanceof TimeoutException) {
49                            return;
50                        }
51                        runnable.run();
52                    }
53                },
54                MoreExecutors.directExecutor());
55    }
56
57    public void pong(final Iq packet) {
58        this.connection.sendResultFor(packet);
59    }
60}