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}