const express = require('express'); const path = require('path'); const http = require('http'); const { Server } = require('socket.io'); const app = express(); const server = http.createServer(app); const io = new Server(server); const PORT = process.env.PORT || 3000; let waitingPlayer = null; // Sert tous les fichiers du dossier "client" app.use(express.static(path.join(__dirname, "..", "client"))); const correctDoor = { x : 2, y : 6}; const DOORS_TO_WIN = 3; io.on("connection", (socket) => { console.log("Un client s'est connecte : ${socket.id}"); if (waitingPlayer === null){ waitingPlayer = socket; socket.emit("status", "En attente d'un second joueur..."); } else { const partner = waitingPlayer; waitingPlayer = null; const socketIsGuide = Math.random() < 0.5; const socketRole = socketIsGuide ? "guide" : "explorateur"; const partnerRole = socketIsGuide ? "explorateur" : "guide"; socket.data.partnerId = partner.id; partner.data.partnerId = socket.id; socket.emit("status", "Partie prete !"); partner.emit("status", "Partie prete !"); socket.data.role = socketRole; partner.data.role = partnerRole; const pairState = { gameOver: false, doorsPassed: 0}; socket.data.pairState = pairState; partner.data.pairState = pairState; socket.emit("role", socketRole); partner.emit("role", partnerRole); } socket.on("message", (data) => { const partnerId = socket.data.partnerId; if (partnerId){ io.to(partnerId).emit("message", data); } }); socket.on("door_reached", (position) => { const pairState = socket.data.pairState; if (!pairState || pairState.gameOver) return; const partnerId = socket.data.partnerId; const partnerSocket = io.sockets.sockets.get(partnerId); const isCorrect = position.x === correctDoor.x && position.y === correctDoor.y; if (!isCorrect){ pairState.gameOver = true; const result = { correct: false}; socket.emit("door_result", result); if (partnerSocket) partnerSocket.emit("door_result", result); return; } pairState.doorsPassed++; if (pairState.doorsPassed >= DOORS_TO_WIN){ pairState.gameOver = true; socket.emit("victory"); if (partnerSocket) partnerSocket.emit("victory"); return; } const temp = socket.data.role; socket.data.role = partnerSocket.data.role; partnerSocket.data.role = temp; const startPos = { x: 1, y: 1}; console.log(pairState); const result = {correct: isCorrect}; socket.emit("door_result", { correct: true}); socket.emit("new_round", startPos); socket.emit("role", socket.data.role); if (partnerSocket){ partnerSocket.emit("door_result", { correct: true }); partnerSocket.emit("new_round", startPos); partnerSocket.emit("role", partnerSocket.data.role); } if (partnerId){ io.to(partnerId).emit("door_result", result); } }); socket.on("disconnect", () => { console.log("Client deconnecte : ${socket.id}"); if (waitingPlayer === socket){ waitingPlayer = null; } }); }); server.listen(PORT, () => { console.log(`Serveur démarré sur http://localhost:${PORT}`); });