mirror of
https://github.com/nextcloud/talk-android
synced 2025-07-14 16:25:05 +01:00
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
This commit is contained in:
commit
5a392be92e
@ -138,6 +138,7 @@ import java.util.Map;
|
|||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
import java.util.concurrent.atomic.AtomicInteger;
|
||||||
|
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
|
|
||||||
@ -1472,6 +1473,8 @@ public class CallActivity extends CallBaseActivity {
|
|||||||
int apiVersion = ApiUtils.getSignalingApiVersion(conversationUser,
|
int apiVersion = ApiUtils.getSignalingApiVersion(conversationUser,
|
||||||
new int[]{ApiUtils.APIv3, 2, 1});
|
new int[]{ApiUtils.APIv3, 2, 1});
|
||||||
|
|
||||||
|
AtomicInteger delayOnError = new AtomicInteger(0);
|
||||||
|
|
||||||
ncApi.pullSignalingMessages(credentials,
|
ncApi.pullSignalingMessages(credentials,
|
||||||
ApiUtils.getUrlForSignaling(apiVersion,
|
ApiUtils.getUrlForSignaling(apiVersion,
|
||||||
baseUrl,
|
baseUrl,
|
||||||
@ -1480,7 +1483,22 @@ public class CallActivity extends CallBaseActivity {
|
|||||||
.observeOn(AndroidSchedulers.mainThread())
|
.observeOn(AndroidSchedulers.mainThread())
|
||||||
.repeatWhen(observable -> observable)
|
.repeatWhen(observable -> observable)
|
||||||
.takeWhile(observable -> isConnectionEstablished())
|
.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>() {
|
.subscribe(new Observer<SignalingOverall>() {
|
||||||
@Override
|
@Override
|
||||||
public void onSubscribe(@io.reactivex.annotations.NonNull Disposable d) {
|
public void onSubscribe(@io.reactivex.annotations.NonNull Disposable d) {
|
||||||
|
Loading…
Reference in New Issue
Block a user