mirror of
https://github.com/AlecM33/Werewolf.git
synced 2025-12-26 15:57:50 +01:00
Merge branch 'master' into develop
This commit is contained in:
6
package-lock.json
generated
6
package-lock.json
generated
@@ -2133,9 +2133,9 @@
|
|||||||
"integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k="
|
"integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k="
|
||||||
},
|
},
|
||||||
"engine.io": {
|
"engine.io": {
|
||||||
"version": "6.1.0",
|
"version": "6.1.2",
|
||||||
"resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.1.2.tgz",
|
||||||
"integrity": "sha512-ErhZOVu2xweCjEfYcTdkCnEYUiZgkAcBBAhW4jbIvNG8SLU3orAqoJCiytZjYF7eTpVmmCrLDjLIEaPlUAs1uw==",
|
"integrity": "sha512-v/7eGHxPvO2AWsksyx2PUsQvBafuvqs0jJJQ0FdmJG1b9qIvgSbqDRGwNhfk2XHaTTbTXiC4quRE8Q9nRjsrQQ==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"@types/cookie": "^0.4.1",
|
"@types/cookie": "^0.4.1",
|
||||||
"@types/cors": "^2.8.12",
|
"@types/cors": "^2.8.12",
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ const apiLimiter = rateLimit({
|
|||||||
const corsOptions = process.env.NODE_ENV.trim() === 'development'
|
const corsOptions = process.env.NODE_ENV.trim() === 'development'
|
||||||
? {
|
? {
|
||||||
origin: '*',
|
origin: '*',
|
||||||
optionsSuccessStatus: 200 // some legacy browsers (IE11, various SmartTVs) choke on 204
|
optionsSuccessStatus: 200
|
||||||
}
|
}
|
||||||
: {
|
: {
|
||||||
origin: 'https://playwerewolf.uk.r.appspot.com',
|
origin: 'https://playwerewolf.uk.r.appspot.com',
|
||||||
@@ -27,7 +27,7 @@ const corsOptions = process.env.NODE_ENV.trim() === 'development'
|
|||||||
};
|
};
|
||||||
|
|
||||||
router.use(cors(corsOptions));
|
router.use(cors(corsOptions));
|
||||||
router.options('/:code/players', cors(corsOptions)); // enable pre-flight request for DELETE
|
//router.options('/:code/players', cors(corsOptions));
|
||||||
|
|
||||||
if (process.env.NODE_ENV.trim() === 'production') { // in prod, limit clients to creating 5 games per 10 minutes.
|
if (process.env.NODE_ENV.trim() === 'production') { // in prod, limit clients to creating 5 games per 10 minutes.
|
||||||
router.use('/create', apiLimiter);
|
router.use('/create', apiLimiter);
|
||||||
|
|||||||
@@ -14,9 +14,9 @@ class GameManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
addGameSocketHandlers = (namespace, socket) => {
|
addGameSocketHandlers = (namespace, socket) => {
|
||||||
socket.on(globals.CLIENT_COMMANDS.FETCH_GAME_STATE, (accessCode, personId, ackFn) => {
|
socket.on(globals.CLIENT_COMMANDS.FETCH_GAME_STATE, async (accessCode, personId, ackFn) => {
|
||||||
this.logger.trace('request for game state for accessCode: ' + accessCode + ' from socket: ' + socket.id + ' with cookie: ' + personId);
|
this.logger.trace('request for game state for accessCode: ' + accessCode + ' from socket: ' + socket.id + ' with cookie: ' + personId);
|
||||||
this.handleRequestForGameState(
|
await this.handleRequestForGameState(
|
||||||
this.namespace,
|
this.namespace,
|
||||||
this.logger,
|
this.logger,
|
||||||
this.activeGameRunner,
|
this.activeGameRunner,
|
||||||
@@ -285,22 +285,28 @@ class GameManager {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
handleRequestForGameState = (namespace, logger, gameRunner, accessCode, personCookie, ackFn, socket) => {
|
handleRequestForGameState = async (namespace, logger, gameRunner, accessCode, personCookie, ackFn, clientSocket) => {
|
||||||
const game = gameRunner.activeGames[accessCode];
|
const game = gameRunner.activeGames[accessCode];
|
||||||
if (game) {
|
if (game) {
|
||||||
const matchingPerson = findPersonByField(game, 'cookie', personCookie);
|
const matchingPerson = findPersonByField(game, 'cookie', personCookie);
|
||||||
if (matchingPerson) {
|
if (matchingPerson) {
|
||||||
if (matchingPerson.socketId === socket.id) {
|
if (matchingPerson.socketId === clientSocket.id) {
|
||||||
logger.trace('matching person found with an established connection to the room: ' + matchingPerson.name);
|
logger.trace('matching person found with an established connection to the room: ' + matchingPerson.name);
|
||||||
ackFn(GameStateCurator.getGameStateFromPerspectiveOfPerson(game, matchingPerson, gameRunner, socket, logger));
|
ackFn(GameStateCurator.getGameStateFromPerspectiveOfPerson(game, matchingPerson, gameRunner, clientSocket, logger));
|
||||||
} else {
|
} else {
|
||||||
logger.trace('matching person found with a new connection to the room: ' + matchingPerson.name);
|
logger.trace('matching person found with a new connection to the room: ' + matchingPerson.name);
|
||||||
socket.join(accessCode);
|
clientSocket.join(accessCode);
|
||||||
matchingPerson.socketId = socket.id;
|
matchingPerson.socketId = clientSocket.id;
|
||||||
ackFn(GameStateCurator.getGameStateFromPerspectiveOfPerson(game, matchingPerson, gameRunner, socket, logger));
|
ackFn(GameStateCurator.getGameStateFromPerspectiveOfPerson(game, matchingPerson, gameRunner, clientSocket, logger));
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
rejectClientRequestForGameState(ackFn);
|
const namespaceSockets = await namespace.in(accessCode).fetchSockets();
|
||||||
|
if (!namespaceSockets.find((namespaceSocket) => namespaceSocket.id === clientSocket.id)) {
|
||||||
|
let newlyAssignedPerson = this.joinGame(game);
|
||||||
|
clientSocket.join(accessCode);
|
||||||
|
newlyAssignedPerson.socketId = clientSocket.id;
|
||||||
|
ackFn(GameStateCurator.getGameStateFromPerspectiveOfPerson(game, newlyAssignedPerson, gameRunner, clientSocket, logger));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
rejectClientRequestForGameState(ackFn);
|
rejectClientRequestForGameState(ackFn);
|
||||||
|
|||||||
Reference in New Issue
Block a user