refactor: debut de la refactorisation du projet
This commit is contained in:
@@ -7,6 +7,7 @@
|
||||
<body>
|
||||
<h1>Bonjour !</h1>
|
||||
<p>Ceci est une page statique servie par Express.</p>
|
||||
<p id="timerDisplay">Temps restant : --</p>
|
||||
<canvas id="maze" width="490" height="490" style="border: 1px solid #333;"></canvas>
|
||||
<input type="text" id="input" placeholder="message">
|
||||
<button id="sendBtn">Envoyer</button>
|
||||
@@ -16,6 +17,10 @@
|
||||
let myRole = null;
|
||||
console.log("Connecte au serveur, id :", socket.id);
|
||||
|
||||
socket.on("timer", (timeLeft) => {
|
||||
document.getElementById("timerDisplay").textContent = `Temps restant : ${timeLeft}s`;
|
||||
});
|
||||
|
||||
socket.on("new_round", (startPos) => {
|
||||
player.x = startPos.x;
|
||||
player.y = startPos.y;
|
||||
@@ -130,6 +135,11 @@
|
||||
}
|
||||
})
|
||||
|
||||
socket.on("timeout", () => {
|
||||
showGameOver("Temps ecoule. Vous avez perdu.");
|
||||
})
|
||||
|
||||
|
||||
socket.on("victory", ()=> {
|
||||
document.getElementById("victoryScreen").style.display = "block";
|
||||
myRole = null;
|
||||
|
||||
1
client/js/canvas.js
Normal file
1
client/js/canvas.js
Normal file
@@ -0,0 +1 @@
|
||||
|
||||
1
client/js/main.js
Normal file
1
client/js/main.js
Normal file
@@ -0,0 +1 @@
|
||||
|
||||
1
client/js/movement.js
Normal file
1
client/js/movement.js
Normal file
@@ -0,0 +1 @@
|
||||
|
||||
1
client/js/player.js
Normal file
1
client/js/player.js
Normal file
@@ -0,0 +1 @@
|
||||
|
||||
1
client/js/role.js
Normal file
1
client/js/role.js
Normal file
@@ -0,0 +1 @@
|
||||
|
||||
1
client/js/socket.js
Normal file
1
client/js/socket.js
Normal file
@@ -0,0 +1 @@
|
||||
|
||||
1
client/js/ui.js
Normal file
1
client/js/ui.js
Normal file
@@ -0,0 +1 @@
|
||||
|
||||
19
server.js
Normal file
19
server.js
Normal file
@@ -0,0 +1,19 @@
|
||||
const express = require("express");
|
||||
const path = require("path");
|
||||
const http = require("http");
|
||||
const { Server } = require("socket.io");
|
||||
|
||||
const { PORT } = require("./config");
|
||||
const { registerSocketHandlers } = require("./socketHandlers");
|
||||
|
||||
const app = express();
|
||||
const server = http.createServer(app);
|
||||
const wSS = new Server(server); // wSS pour webSocketServer
|
||||
|
||||
app.use(express.static(path.join(__dirname, "..", "client")));
|
||||
|
||||
wSS.on("connection", (socket) => registerSocketHandlers(wSS, socket));
|
||||
|
||||
server.listen(PORT, () => {
|
||||
console.log(`serveur demarre sur http://localhost:${PORT}`);
|
||||
});
|
||||
1
server/config.js
Normal file
1
server/config.js
Normal file
@@ -0,0 +1 @@
|
||||
|
||||
6
server/doorLogic.js
Normal file
6
server/doorLogic.js
Normal file
@@ -0,0 +1,6 @@
|
||||
/*
|
||||
doorLogic.js
|
||||
|
||||
Sert a regrouper toute la logique autour des portes
|
||||
*/
|
||||
|
||||
1
server/gameState.js
Normal file
1
server/gameState.js
Normal file
@@ -0,0 +1 @@
|
||||
|
||||
1
server/maze.js
Normal file
1
server/maze.js
Normal file
@@ -0,0 +1 @@
|
||||
|
||||
@@ -4,7 +4,8 @@
|
||||
"description": "",
|
||||
"main": "index.js",
|
||||
"scripts": {
|
||||
"test": "echo \"Error: no test specified\" && exit 1"
|
||||
"test": "echo \"Error: no test specified\" && exit 1",
|
||||
"start": "node server.js"
|
||||
},
|
||||
"keywords": [],
|
||||
"author": "",
|
||||
|
||||
123
server/server.js
123
server/server.js
@@ -1,117 +1,12 @@
|
||||
const express = require('express');
|
||||
const path = require('path');
|
||||
const http = require('http');
|
||||
const { Server } = require('socket.io');
|
||||
/*
|
||||
server.js
|
||||
|
||||
const app = express();
|
||||
const server = http.createServer(app);
|
||||
const io = new Server(server);
|
||||
Ce fichier sert principalement de point d'entree au programme serveur et a lancer tous les modules necessaires a son fonctionnement
|
||||
*/
|
||||
|
||||
const PORT = process.env.PORT || 3000;
|
||||
const express = require("express");
|
||||
const path = require("path");
|
||||
const http = require("http");
|
||||
const { Server } = require("socket.io");
|
||||
|
||||
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}`);
|
||||
});
|
||||
const { PORT } = require("./config.js");
|
||||
|
||||
63
server/socketHandler.js
Normal file
63
server/socketHandler.js
Normal file
@@ -0,0 +1,63 @@
|
||||
/*
|
||||
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");
|
||||
|
||||
function registerSocketHandlers(io, 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);
|
||||
}
|
||||
|
||||
socket.on("door_reached", (position) => handleDoorReached(io, 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 };
|
||||
1
server/timer.js
Normal file
1
server/timer.js
Normal file
@@ -0,0 +1 @@
|
||||
|
||||
Reference in New Issue
Block a user