diff --git a/API/src/database/database.sqlite b/API/src/database/database.sqlite
index ed7be32ccd95fadcfdba4d8983a6d5731c58f8a2..3b0f607132d41b2d59a2ed5c6fefffe988f5b37b 100644
Binary files a/API/src/database/database.sqlite and b/API/src/database/database.sqlite differ
diff --git a/API/src/express/Server.ts b/API/src/express/Server.ts
index b9adf9bb34ea1835f2c64ea74d68a3dfedc1fbcc..e45eed10423f19a3a9bae45f10e3e3a2910dce6a 100644
--- a/API/src/express/Server.ts
+++ b/API/src/express/Server.ts
@@ -1,25 +1,35 @@
-import { Express }      from 'express-serve-static-core';
-import cors             from 'cors';
+import {Express} from 'express-serve-static-core';
+import cors from 'cors';
 import morganMiddleware from '../logging/MorganMiddleware';
-import logger           from '../logging/WinstonLogger';
-import { AddressInfo }  from 'net';
-import http             from 'http';
-import helmet           from 'helmet';
-import express          from 'express';
-import multer           from 'multer';
-import Config           from '../config/Config';
-import BaseRoutes       from '../routes/BaseRoutes';
-import ServerIO         from '../socket.io/ServerIO';
-import routerUser from "../routes/router-gamer";
+import logger from '../logging/WinstonLogger';
+import {AddressInfo} from 'net';
+import http from 'http';
+import helmet from 'helmet';
+import express from 'express';
+import multer from 'multer';
+import Config from '../config/Config';
+import BaseRoutes from '../routes/BaseRoutes';
+import ServerIO from '../socket.io/ServerIO';
 import routerGamer from "../routes/router-gamer";
 import routerGuest from "../routes/router-guest";
 import routerAdmin from "../routes/router-admin";
+import jwt from 'jsonwebtoken';
+import * as IO from 'socket.io';
+
+
+export interface SocketIoInfo extends IO.Socket{
+    user :any;
+}
+
+
 
 
 class Server {
     private readonly backend: Express;
     private readonly server: http.Server;
     private readonly io: ServerIO;
+    public static invalidTokens: string[] = [];
+
 
     constructor() {
         this.backend = express();
@@ -52,6 +62,16 @@ class Server {
         this.server = http.createServer(this.backend);
 
         this.io = new ServerIO(this.server);
+        this.io.use((socket: SocketIoInfo, next) => {
+            const token = socket.handshake.auth.token;
+
+            try {
+                socket.user = jwt.verify(token, process.env.SECRET_KEY);
+                next();
+            } catch (error) {
+                next(new Error('Invalid token'));
+            }
+        });
     }
 
     run() {
diff --git a/API/src/routes/middleware.ts b/API/src/routes/middleware.ts
index 3c3164c36f0467489626ed1b46ebafd347b1f834..56be529b503cdc9b0cbb9487d42d431675610299 100644
--- a/API/src/routes/middleware.ts
+++ b/API/src/routes/middleware.ts
@@ -47,6 +47,8 @@ export interface TokenRequest extends express.Request {
     user?: any;
 }
 
+
+
 export async function verifyToken(req: TokenRequest, res: express.Response, next: express.NextFunction) {
     const authHeader = req.headers['authorization'];
 
@@ -59,7 +61,7 @@ export async function verifyToken(req: TokenRequest, res: express.Response, next
 
     try {
         req.user = jwt.verify(token, secretKey);
-        if(req.user.username !== req.params.admin)
+        if(req.user.username !== req.params.admin && req.user.username !== req.params.username)
             return res.status(403).json({message: 'Invalid token user'});
         //check if admin or user
         next();
diff --git a/API/src/routes/router-guest.ts b/API/src/routes/router-guest.ts
index ad6875e571b780883d9b047a867bb5aeee6a89fb..32728878839f94492c75e6478f81560121cd08ce 100644
--- a/API/src/routes/router-guest.ts
+++ b/API/src/routes/router-guest.ts
@@ -29,7 +29,7 @@ router.post('/:username', checkExistingUser, async (req: express.Request, res: e
         let usertype=user.dataValues.type === "user"?"USER":"ADMIN"
         if (user.dataValues.password === data.password) {
             // Génération du token JWT
-            const userInfo={ type: userType, username: req.params.username, firstname: user.dataValues.firstname, lastname: user.dataValues.lastname }
+            const userInfo={ type: user.dataValues.type, username: req.params.username, firstname: user.dataValues.firstname, lastname: user.dataValues.lastname }
             const secretKey=process.env.SECRET_KEY;
             const token = jwt.sign(userInfo, secretKey);
             res.status(StatusCodes.OK).json({message: usertype+"_ALLOWED", token: token, firstname: user.dataValues.firstname, lastname: user.dataValues.lastname});
diff --git a/API/src/socket.io/ServerIO.ts b/API/src/socket.io/ServerIO.ts
index 11e53d43f1eb05eefe03188960519b16ff155256..9ec2874d7485b1a4a2ce760a84eddefce2933d13 100644
--- a/API/src/socket.io/ServerIO.ts
+++ b/API/src/socket.io/ServerIO.ts
@@ -1,11 +1,16 @@
 import * as IO from 'socket.io';
 import logger  from '../logging/WinstonLogger';
 import http    from 'http';
+import Server, {SocketIoInfo} from "../express/Server";
+import {UserInfo} from "./UserInfo"
 
 
 //TODO: In this file you can add/edit all things about socket.io
 
+
+
 class ServerIO extends IO.Server {
+    players: { [key: string]: UserInfo } = {};
     constructor(server: http.Server) {
         super(server, {
             cors: {
@@ -13,18 +18,67 @@ class ServerIO extends IO.Server {
             }
         });
 
-        this.on('connection', (socket: IO.Socket) => {
-            logger.info(`Nouveau socket vers ${ socket.client.conn.remoteAddress }`);
+
+        this.on('connection', (socket: SocketIoInfo) => {
+            logger.info(`Nouveau socket vers ${ socket.client.conn.remoteAddress }`) ;
+            console.log(`Socket info: ${ socket.user.username } // ${ socket.user.firstname } // ${socket.user.lastname}`);
+            const playerKey = socket.user.username;
+            // Vérifiez si le joueur existe déjà dans le dictionnaire
+            if (this.players[playerKey]) {
+                // Le joueur est déjà connecté, vous pouvez effectuer une action appropriée ici
+                console.log(`Player ${playerKey} is already connected.`);
+            } else {
+                // Le joueur n'est pas encore connecté, ajoutez-le au dictionnaire
+                this.players[playerKey] = new UserInfo(
+                    socket.user.username,
+                    socket.user.firstname,
+                    socket.user.lastname
+                );
+                console.log(`Player ${playerKey} is connected.`);
+            }
+
+            this.testNumberofPlayer();
+
 
             this.registerEventsOnSocket(socket);
         });
+
+
     }
 
-    private registerEventsOnSocket(socket: IO.Socket) {
-        socket.on('Hello World', _ => {
-            socket.emit('Bienvenue', socket.id);
+    private registerEventsOnSocket(socket: SocketIoInfo) {
+
+        socket.on('disconnect', () => {
+            logger.info(`Deconnexion du socket ${ socket.client.conn.remoteAddress }`) ;
+            console.log(`Socket info: ${ socket.user.username } // ${ socket.user.firstname } // ${socket.user.lastname}`);
+            const playerKey = socket.user.username;
+
+
+            // Vérifiez si le joueur est dans le dictionnaire
+            if (this.players[playerKey]) {
+                // Le joueur est connecté, retirez-le du dictionnaire
+                delete this.players[playerKey];
+                console.log(`Player ${playerKey} is disconnected.`);
+            } else {
+                // Le joueur n'est pas trouvé dans le dictionnaire, cela peut être un cas anormal
+                console.log(`Player ${playerKey} is not connected.`);
+            }
+            this.testNumberofPlayer();
+
         });
     }
+
+    private testNumberofPlayer(){
+        if(Object.keys(this.players).length < 3){
+            this.emit("players-left", 3 - Object.keys(this.players).length)
+            console.log(Object.keys(this.players).length)
+        }
+
+        if (Object.keys(this.players).length === 3) {
+            // Démarre le jeu
+            this.emit('start-game');
+        }
+    }
 }
 
 
diff --git a/API/src/socket.io/UserInfo.ts b/API/src/socket.io/UserInfo.ts
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..079aa860b57f109ad5e09d5c13735075b1e624c2 100644
--- a/API/src/socket.io/UserInfo.ts
+++ b/API/src/socket.io/UserInfo.ts
@@ -0,0 +1,7 @@
+export class UserInfo {
+    constructor(
+        public username: string,
+        public firstname: string,
+        public lastname: string
+    ){}
+}
\ No newline at end of file