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