mirror of
https://github.com/vector-im/element-call.git
synced 2024-11-27 00:48:06 +08:00
consts
This commit is contained in:
parent
7e5a8b8feb
commit
c19645c710
@ -54,22 +54,24 @@ export type GroupCallStatus =
|
||||
| GroupCallWaitForInvite
|
||||
| GroupCallCanKnock;
|
||||
|
||||
const MAX_RETRIES_FOR_INVITE_JOIN_FAILURE = 3;
|
||||
const MAX_ATTEMPTS_FOR_INVITE_JOIN_FAILURE = 3;
|
||||
const DELAY_MS_FOR_INVITE_JOIN_FAILURE = 3000;
|
||||
|
||||
/**
|
||||
* Join a room, and retry on M_FORBIDDEN error in order to work
|
||||
* around a potential race when joining rooms over federation.
|
||||
*
|
||||
* Will retry up to `MAX_RETRIES_FOR_INVITE_JOIN_FAILURE` times.
|
||||
* Will wait up to to `DELAY_MS_FOR_INVITE_JOIN_FAILURE` per attempt.
|
||||
* Will try up to `MAX_ATTEMPTS_FOR_INVITE_JOIN_FAILURE` times.
|
||||
*
|
||||
* @see https://github.com/element-hq/element-call/issues/2634
|
||||
* @param client The matrix client
|
||||
* @param retries Number of attempts made.
|
||||
* @param attempt Number of attempts made.
|
||||
* @param params Parameters to pass to client.joinRoom
|
||||
*/
|
||||
async function joinRoomAfterInvite(
|
||||
client: MatrixClient,
|
||||
retries = 0,
|
||||
attempt = 0,
|
||||
...params: Parameters<MatrixClient["joinRoom"]>
|
||||
): ReturnType<MatrixClient["joinRoom"]> {
|
||||
try {
|
||||
@ -78,11 +80,11 @@ async function joinRoomAfterInvite(
|
||||
if (
|
||||
ex instanceof MatrixError &&
|
||||
ex.errcode === "M_FORBIDDEN" &&
|
||||
retries < MAX_RETRIES_FOR_INVITE_JOIN_FAILURE
|
||||
attempt < MAX_ATTEMPTS_FOR_INVITE_JOIN_FAILURE
|
||||
) {
|
||||
// If we were invited and got a M_FORBIDDEN, it's highly likely the server hasn't caught up yet.
|
||||
await new Promise((r) => setTimeout(r, 5000));
|
||||
return joinRoomAfterInvite(client, retries + 1, ...params);
|
||||
await new Promise((r) => setTimeout(r, DELAY_MS_FOR_INVITE_JOIN_FAILURE));
|
||||
return joinRoomAfterInvite(client, attempt + 1, ...params);
|
||||
}
|
||||
throw ex;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user