mirror of
https://github.com/nextcloud/talk-android
synced 2025-03-06 22:29:09 +00: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.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) {
|
||||
|
Loading…
Reference in New Issue
Block a user