Messerrunde: Einrichten bei Fehlern automatisch wiederholen
Nach einer frischen Installation dauert das erste Laden einer Map oft länger als die Wartezeit. Die App versucht das Einrichten jetzt bis zu dreimal (alle 10 s). Scheitern alle Versuche, zeigt die Lobby den Fehler und dem Organisator den Knopf "Messerrunde neu einrichten".
This commit is contained in:
1 parent
934d989572
commit
1492c280d5
4 files changed
+66
-4
No files matched your search
+31
-1
@@ -730,7 +730,7 @@ test('Messerrunde auf dem eigenen Match-Server: Verbindungsdaten in der Lobby, d
|
||||
await app.manager.poll();
|
||||
await waitFor(() => app.manager.row(id).knife_phase === 'warmup', { label: 'Messerrunde eingerichtet' });
|
||||
const player = (await call('GET', `/matches/${id}`, { token: tokens.b1 })).body;
|
||||
assert.deepEqual(player.server.knife, { ready: true, phase: 'warmup' });
|
||||
assert.deepEqual(player.server.knife, { ready: true, phase: 'warmup', failed: false });
|
||||
assert.equal(player.server.connect.password, app.manager.row(id).server_password, 'Spieler bekommen das Passwort des Matches');
|
||||
const pub = (await call('GET', `/matches/${id}`)).body;
|
||||
assert.equal(pub.server?.connect, undefined, 'öffentlich keine Verbindungsdaten');
|
||||
@@ -775,3 +775,33 @@ test('Messerrunde auf dem eigenen Match-Server: Verbindungsdaten in der Lobby, d
|
||||
await close();
|
||||
}
|
||||
});
|
||||
|
||||
test('Messerrunde: Einrichten wird bei Fehlern von selbst wiederholt, danach kann der Organisator neu starten', async () => {
|
||||
const { app, call, close } = await setup();
|
||||
try {
|
||||
app.manager.knifeRetryDelayMs = 0;
|
||||
const configure = app.adapter.configure.bind(app.adapter);
|
||||
let failures = 2;
|
||||
app.adapter.configure = async (h, plan) => {
|
||||
if (failures > 0) { failures -= 1; throw new Error('Map de_mirage wurde nicht rechtzeitig geladen'); }
|
||||
return configure(h, plan);
|
||||
};
|
||||
const created = await call('POST', '/matches', { body: { teamA: 'Alpha', teamB: 'Bravo', mode: 'wingman', format: 'bo1', vetoStart: 'knife' } });
|
||||
const { id, organizerToken: org } = created.body;
|
||||
await app.manager.poll();
|
||||
// Zwei Fehlschläge, der dritte Versuch klappt ohne Zutun
|
||||
await waitFor(() => app.manager.row(id).knife_phase === 'warmup', { label: 'Messerrunde nach Wiederholung eingerichtet' });
|
||||
|
||||
// Scheitern alle Versuche, bekommt der Organisator den Knopf
|
||||
failures = 99;
|
||||
app.manager.update(id, { knife_at: null, knife_phase: null });
|
||||
app.manager.knifeAttempts.delete(id);
|
||||
app.manager.maybeConfigure(id);
|
||||
await waitFor(async () => (await call('GET', `/matches/${id}`, { token: org })).body.server.knife.failed, { label: 'als fehlgeschlagen gemeldet' });
|
||||
failures = 0;
|
||||
assert.equal((await call('POST', `/matches/${id}/server/retry`, { token: org })).status, 200);
|
||||
await waitFor(() => app.manager.row(id).knife_phase === 'warmup', { label: 'von Hand neu eingerichtet' });
|
||||
} finally {
|
||||
await close();
|
||||
}
|
||||
});
|
||||
Reference in new issue
Block a user