Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/talk-android.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
authorTim Krüger <t@timkrueger.me>2022-11-07 14:20:32 +0300
committerGitHub <noreply@github.com>2022-11-07 14:20:32 +0300
commit5a392be92e49896f4daee2d7da81929251c498c9 (patch)
treefc441c5e417626e0d9561bbff3003b1988f50e7e /app
parent3d89d6b22f5fc84cae30014d7f1e82863547b813 (diff)
parent4b4b9da2b1156917a2e1e8d698a52cdc697f4f03 (diff)
Merge pull request #2541 from nextcloud/keep-retrying-with-exponential-backoff-if-pulling-signaling-messages-fails
Keep retrying with exponential backoff if pulling signaling messages fails
Diffstat (limited to 'app')
-rw-r--r--app/src/main/java/com/nextcloud/talk/activities/CallActivity.java20
1 files changed, 19 insertions, 1 deletions
diff --git a/app/src/main/java/com/nextcloud/talk/activities/CallActivity.java b/app/src/main/java/com/nextcloud/talk/activities/CallActivity.java
index 507211a84..ecdefcfae 100644
--- a/app/src/main/java/com/nextcloud/talk/activities/CallActivity.java
+++ b/app/src/main/java/com/nextcloud/talk/activities/CallActivity.java
@@ -138,6 +138,7 @@ import java.util.Map;
import java.util.Objects;
import java.util.Set;
import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicInteger;
import javax.inject.Inject;
@@ -1472,6 +1473,8 @@ public class CallActivity extends CallBaseActivity {
int apiVersion = ApiUtils.getSignalingApiVersion(conversationUser,
new int[]{ApiUtils.APIv3, 2, 1});
+ AtomicInteger delayOnError = new AtomicInteger(0);
+
ncApi.pullSignalingMessages(credentials,
ApiUtils.getUrlForSignaling(apiVersion,
baseUrl,
@@ -1480,7 +1483,22 @@ public class CallActivity extends CallBaseActivity {
.observeOn(AndroidSchedulers.mainThread())
.repeatWhen(observable -> observable)
.takeWhile(observable -> isConnectionEstablished())
- .retry(3, observable -> isConnectionEstablished())
+ .doOnNext(value -> delayOnError.set(0))
+ .retryWhen(errors -> errors
+ .flatMap(error -> {
+ if (!isConnectionEstablished()) {
+ return Observable.error(error);
+ }
+
+ if (delayOnError.get() == 0) {
+ delayOnError.set(1);
+ } else if (delayOnError.get() < 16) {
+ delayOnError.set(delayOnError.get() * 2);
+ }
+
+ return Observable.timer(delayOnError.get(), TimeUnit.SECONDS);
+ })
+ )
.subscribe(new Observer<SignalingOverall>() {
@Override
public void onSubscribe(@io.reactivex.annotations.NonNull Disposable d) {