Files
echoes/server/server.js

81 lines
2.1 KiB
JavaScript

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};
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;
socket.emit("role", socketIsGuide ? "guide" : "explorateur");
partner.emit("role", socketIsGuide ? "explorateur" : "guide");
socket.data.partnerId = partner.id;
partner.data.partnerId = socket.id;
const pairState = { gameOver: false};
socket.data.pairState = pairState;
partner.data.pairState = pairState;
socket.emit("status", "Partie prete !");
partner.emit("status", "Partie prete !");
}
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 isCorrect = position.x === correctDoor.x && position.y === correctDoor.y;
if (!isCorrect){
pairState.gameOver = true;
}
const result = {correct: isCorrect};
socket.emit("door_result", result);
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}`);
});