zhao/imports/api/methods/joinGame.js

38 lines
985 B
JavaScript

import { Meteor } from "meteor/meteor";
import { Random } from "meteor/random";
import { check } from "meteor/check";
import Rooms from "../collections/Rooms.js";
import Players from "../collections/Players.js";
Meteor.methods({
"joinGame": async ({ code, name }) => {
check(code, String);
check(name, String);
name = name.trim();
let room = Rooms.findOne({ joinCode: code });
if (room === undefined) {
throw new Meteor.Error("room-not-found");
}
if (room.state !== "waitingRoom") {
throw new Meteor.Error("room-already-playing");
}
let roomId = room._id;
try {
let playerId = Players.insert({ roomId, name });
} catch (e) {
if (e.code === 11000) {
throw new Meteor.Error("name-collision");
}
}
let joinCode = room.joinCode;
let players = {};
Players.find({ roomId }).forEach((doc) => {
players[doc._id] = doc.name;
});
return { joinCode, players, roomId };
}
});