[Socket.io] Rooms/Namespaces dynamiques

Par ZauChoco, il y a 7 ans


Javascript NodeJS

Bonsoir,

Je cherche pour un jeu à faire des rooms dynamiques, en effet, je souhaite pour chaque parties faire une room, de la forme par exemple "game-[ID de la partie]".

Chaque room ce type commençeraient alors par "game-", avec le même code.

Le problème étant que je ne sais pas et je n'ai pas trouvé comment faire.

Merci d'avance pour votre aide

1 réponse

jerethom, il y a 7 ans

Salut,
Pour créer des rooms dynamiquement il faut le faire du côté client.
Tu peux par exemple imaginer que le code ci-dessous est appelé lors du lancement d'une nouvelle game.

const socket = io.connect(); game.on('start', (gameID) => { socket.emit('start', { name: `game-${gameID}`, player: 'Player1' }); });

Après j'imagine que tu as besoin d'envoyer des informations depuis ton back, tu peux imagnier cette solution:

const games = {}; const players = {}; io.sockets.on('connection', (socket) => { socket.on('start', ({ name, player }) => { if (!games[name]) games[name] = {}; games[name][id] = socket.to(socket.id); games[name].join(name, () => { // Si tu veux envoyer un message à une connection particulière (de manière privé) socket.to(id).emit('nbPlayer', Object.key(games[name]).length - 1); // Si tu envoyer un message à toute la room socket.to(name).emit('srvMsg', 'Ready ?'); }); }); });

Cet exemple n'est pas complet mais j'espère qu'il te permettra d'avoir un point de départ.