Add ready lobby and reconnect support
This commit is contained in:
1 parent
19b1a67773
commit
32594c7f81
8 files changed
+215
-36
No files matched your search
@@ -27,10 +27,10 @@ const presenceB = { userId: "pilot-b", sessionId: "b", username: "Pilot B" };
|
||||
let state = context.matchInit({}, logger, nk, { difficulty: 1 }).state;
|
||||
state = context.matchJoin({}, logger, nk, dispatcher, 1, state, [presenceA]).state;
|
||||
state = context.matchJoin({}, logger, nk, dispatcher, 2, state, [presenceB]).state;
|
||||
assert.strictEqual(state.started, true);
|
||||
assert.strictEqual(state.started, false);
|
||||
assert.strictEqual(state.slots["pilot-a"], 0);
|
||||
assert.strictEqual(state.slots["pilot-b"], 1);
|
||||
assert.ok(sent.some(entry => entry.opCode === "label" && entry.data.open === false));
|
||||
assert.ok(sent.some(entry => entry.opCode === 1 && entry.data.players[0].name === "Pilot A"));
|
||||
assert.strictEqual(context.normalizeRoomCode(" ab-c12! "), "ABC12");
|
||||
|
||||
const privateMatch = context.matchInit({}, logger, nk, { difficulty: 2, mode: "private", roomCode: "AB23CD", hostUserId: "pilot-a" });
|
||||
@@ -53,7 +53,14 @@ function message(sender, opCode, payload) {
|
||||
return { sender, opCode, data: Buffer.from(JSON.stringify(payload)) };
|
||||
}
|
||||
|
||||
state = context.matchLoop({}, logger, nk, dispatcher, 3, state, [
|
||||
state = context.matchLoop({}, logger, nk, dispatcher, 3, state, [message(presenceA, 14, { ready: true, name: "Kommandant A" })]).state;
|
||||
assert.strictEqual(state.started, false);
|
||||
state = context.matchLoop({}, logger, nk, dispatcher, 4, state, [message(presenceB, 14, { ready: true, name: "Kommandant B" })]).state;
|
||||
assert.strictEqual(state.started, true);
|
||||
assert.strictEqual(state.players["pilot-a"].name, "Kommandant A");
|
||||
assert.ok(sent.some(entry => entry.opCode === "label" && entry.data.open === false));
|
||||
|
||||
state = context.matchLoop({}, logger, nk, dispatcher, 5, state, [
|
||||
message(presenceA, 10, { tower_type: 0, x: 200, y: 200 }),
|
||||
message(presenceB, 10, { tower_type: 1, x: 2760, y: 200 })
|
||||
]).state;
|
||||
@@ -61,10 +68,10 @@ assert.strictEqual(state.towers.length, 2);
|
||||
assert.strictEqual(state.credits[0], 310);
|
||||
assert.strictEqual(state.credits[1], 250);
|
||||
|
||||
state = context.matchLoop({}, logger, nk, dispatcher, 4, state, [message(presenceA, 13, {})]).state;
|
||||
state = context.matchLoop({}, logger, nk, dispatcher, 6, state, [message(presenceA, 13, {})]).state;
|
||||
assert.strictEqual(state.wave, 1);
|
||||
assert.strictEqual(state.waveActive, true);
|
||||
for (let tick = 5; tick < 30; tick++) state = context.matchLoop({}, logger, nk, dispatcher, tick, state, []).state;
|
||||
for (let tick = 7; tick < 30; tick++) state = context.matchLoop({}, logger, nk, dispatcher, tick, state, []).state;
|
||||
assert.ok(state.enemies.length > 0 || state.spawnRemaining > 0);
|
||||
assert.ok(sent.some(entry => entry.opCode === 1 && entry.data.started === true));
|
||||
|
||||
@@ -74,4 +81,13 @@ assert.strictEqual(state.towers.find(tower => tower.id === towerA.id).level, 2);
|
||||
state = context.matchLoop({}, logger, nk, dispatcher, 31, state, [message(presenceA, 12, { tower_id: towerA.id })]).state;
|
||||
assert.ok(!state.towers.some(tower => tower.id === towerA.id));
|
||||
|
||||
state = context.matchLeave({}, logger, nk, dispatcher, 32, state, [presenceB]).state;
|
||||
assert.strictEqual(state.started, true);
|
||||
assert.strictEqual(state.pausedForReconnect, true);
|
||||
assert.strictEqual(context.snapshot(state, 32).players[1].connected, false);
|
||||
assert.strictEqual(context.matchJoinAttempt({}, logger, nk, dispatcher, 33, state, presenceB, {}).accept, true);
|
||||
state = context.matchJoin({}, logger, nk, dispatcher, 33, state, [presenceB]).state;
|
||||
assert.strictEqual(state.pausedForReconnect, false);
|
||||
assert.strictEqual(state.slots["pilot-b"], 1);
|
||||
|
||||
console.log("VOID_BASTION_SERVER_SIM_OK");
|
||||
Reference in new issue
Block a user