/* 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 { startInstruction } = 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(io, 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 };