mirror of
https://github.com/fluxerapp/fluxer
synced 2026-10-18 13:35:42 +09:00
39 lines
959 B
TypeScript
39 lines
959 B
TypeScript
// SPDX-FileCopyrightText: 2024 LiveKit, Inc.
|
|
//
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
import type {ReconnectContext, ReconnectPolicy} from './ReconnectPolicy.ts';
|
|
|
|
const maxRetryDelay = 7000;
|
|
|
|
const DEFAULT_RETRY_DELAYS_IN_MS = [
|
|
0,
|
|
300,
|
|
2 * 2 * 300,
|
|
3 * 3 * 300,
|
|
4 * 4 * 300,
|
|
maxRetryDelay,
|
|
maxRetryDelay,
|
|
maxRetryDelay,
|
|
maxRetryDelay,
|
|
maxRetryDelay,
|
|
];
|
|
|
|
class DefaultReconnectPolicy implements ReconnectPolicy {
|
|
private readonly _retryDelays: Array<number>;
|
|
|
|
constructor(retryDelays?: Array<number>) {
|
|
this._retryDelays = retryDelays !== undefined ? [...retryDelays] : DEFAULT_RETRY_DELAYS_IN_MS;
|
|
}
|
|
|
|
public nextRetryDelayInMs(context: ReconnectContext): number | null {
|
|
if (context.retryCount >= this._retryDelays.length) return null;
|
|
|
|
const retryDelay = this._retryDelays[context.retryCount];
|
|
if (context.retryCount <= 1) return retryDelay;
|
|
|
|
return retryDelay + Math.random() * 1_000;
|
|
}
|
|
}
|
|
|
|
export default DefaultReconnectPolicy;
|