package com.boardgamegeek.io; public class FixedBackOff implements BackOff { public static final int DEFAULT_INTERVAL_MILLIS = 5000; public static final int DEFAULT_MAX_BACKOFF_COUNT = 1; private final int intervalMillis; private final int maxBackOffCount; private int backOffCount; protected FixedBackOff(Builder builder) { intervalMillis = builder.intervalMillis; maxBackOffCount = builder.maxBackOffCount; checkArgument(intervalMillis > 0); checkArgument(maxBackOffCount >= 0); reset(); } @Override public long nextBackOffMillis() { backOffCount++; if (backOffCount > maxBackOffCount) return BackOff.STOP; return intervalMillis; } @Override public void reset() { backOffCount = 0; } private static void checkArgument(boolean expression) { if (!expression) { throw new IllegalArgumentException(); } } public static class Builder { int intervalMillis = DEFAULT_INTERVAL_MILLIS; int maxBackOffCount = DEFAULT_MAX_BACKOFF_COUNT; public Builder() { } public FixedBackOff build() { return new FixedBackOff(this); } public Builder setIntervalMillis(int intervalMillis) { this.intervalMillis = intervalMillis; return this; } public Builder setMaxBackOffCount(int maxBackOffCount) { this.maxBackOffCount = maxBackOffCount; return this; } } }