Add private multiplayer room codes

This commit is contained in:
Emporex committed 2026-10-04 04:10:20 +02:00
1 parent 7362ca0f02
commit 19b1a67773
8 files changed
+341 -24

No files matched your search

+23
View File
@@ -12,6 +12,11 @@ const sent = [];
const dispatcher = {
broadcastMessage(opCode, data) {
sent.push({ opCode, data: JSON.parse(data) });
},
matchLabelUpdate(label) {
let data = label;
try { data = JSON.parse(label); } catch (error) {}
sent.push({ opCode: "label", data });
}
};
const nk = { binaryToString: data => Buffer.from(data).toString("utf8") };
@@ -25,6 +30,24 @@ state = context.matchJoin({}, logger, nk, dispatcher, 2, state, [presenceB]).sta
assert.strictEqual(state.started, true);
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.strictEqual(context.normalizeRoomCode(" ab-c12! "), "ABC12");
const privateMatch = context.matchInit({}, logger, nk, { difficulty: 2, mode: "private", roomCode: "AB23CD", hostUserId: "pilot-a" });
assert.strictEqual(privateMatch.label, "AB23CD");
assert.strictEqual(privateMatch.state.difficulty, 2);
const roomStorage = new Map();
const nkRooms = {
storageRead(ops) { return ops.map(op => roomStorage.get(op.key)).filter(Boolean); },
storageWrite(ops) { for (const op of ops) roomStorage.set(op.key, { value: op.value }); },
storageDelete(ops) { for (const op of ops) roomStorage.delete(op.key); },
matchCreate() { return "private-match-id"; }
};
const createdRoom = JSON.parse(context.rpcCreatePrivateRoom({ userId: "pilot-a" }, logger, nkRooms, JSON.stringify({ difficulty: 2 })));
assert.strictEqual(createdRoom.room_code.length, 6);
const joinedRoom = JSON.parse(context.rpcJoinPrivateRoom({ userId: "pilot-b" }, logger, nkRooms, JSON.stringify({ room_code: createdRoom.room_code.toLowerCase() })));
assert.strictEqual(joinedRoom.match_id, "private-match-id");
function message(sender, opCode, payload) {
return { sender, opCode, data: Buffer.from(JSON.stringify(payload)) };