minecraft-src/com/mojang/realmsclient/gui/task/RepeatedDelayStrategy.java
2025-07-04 01:41:11 +03:00

46 lines
1 KiB
Java

package com.mojang.realmsclient.gui.task;
import com.mojang.logging.LogUtils;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import org.slf4j.Logger;
@Environment(EnvType.CLIENT)
public interface RepeatedDelayStrategy {
RepeatedDelayStrategy CONSTANT = new RepeatedDelayStrategy() {
@Override
public long delayCyclesAfterSuccess() {
return 1L;
}
@Override
public long delayCyclesAfterFailure() {
return 1L;
}
};
long delayCyclesAfterSuccess();
long delayCyclesAfterFailure();
static RepeatedDelayStrategy exponentialBackoff(int maxFailureDelay) {
return new RepeatedDelayStrategy() {
private static final Logger LOGGER = LogUtils.getLogger();
private int failureCount;
@Override
public long delayCyclesAfterSuccess() {
this.failureCount = 0;
return 1L;
}
@Override
public long delayCyclesAfterFailure() {
this.failureCount++;
long l = Math.min(1L << this.failureCount, maxFailureDelay);
LOGGER.debug("Skipping for {} extra cycles", l);
return l;
}
};
}
}