Files
echoes/server/socketHandler.js

67 lines
2.2 KiB
JavaScript

/*
socketHandlers.js
Sert a regrouper tous ce qui passe dans une seule connexion
*/
const gameState = require("./gameState");
const { GAME_DURATION } = require("./config");
const { handleDoorReached } = require("./doorLogic");
const { startTimer } = require("./timer");
const { startInstructionLoop } = require("./guideInstruction");
function registerSocketHandlers(wSS, socket) {
console.log(`Un client s'est connecté : ${socket.id}`);
if (gameState.waitingPlayer === null) {
gameState.waitingPlayer = socket;
socket.emit("status", "En attente d'un second joueur...");
} else {
const partner = gameState.waitingPlayer;
gameState.waitingPlayer = null;
const socketIsGuide = Math.random() < 0.5;
const socketRole = socketIsGuide ? "guide" : "explorateur";
const partnerRole = socketIsGuide ? "explorateur" : "guide";
socket.data.role = socketRole;
partner.data.role = partnerRole;
socket.data.partnerId = partner.id;
partner.data.partnerId = socket.id;
// État partagé par référence entre les deux sockets de la paire
const pairState = { gameOver: false, doorsPassed: 0, timeLeft: GAME_DURATION };
socket.data.pairState = pairState;
partner.data.pairState = pairState;
socket.emit("role", socketRole);
partner.emit("role", partnerRole);
socket.emit("status", "Partie prête !");
partner.emit("status", "Partie prête !");
startTimer(socket, partner, pairState);
startInstructionLoop(wSS, socket , partner, pairState, () => {
return "Descendre de quatre cases, aller a droite de une case, descendre de 1 case";
});
}
socket.on("door_reached", (position) => handleDoorReached(wSS, socket, position));
socket.on("disconnect", () => {
console.log(`Client déconnecté : ${socket.id}`);
if (gameState.waitingPlayer === socket) {
gameState.waitingPlayer = null;
}
const partnerId = socket.data.partnerId;
if (partnerId) {
const partnerSocket = wSS.sockets.sockets.get(partnerId);
if (partnerSocket){
partnerSocket.emit("status", "Ton partenaire s'est deconnecte");
}
}
});
}
module.exports = { registerSocketHandlers };