Хочу сделать многопользовательскую настольную игру в локальной сети на vue с помощью websokets(ws). У меня есть такой код сервера, я хочу чтоб после нажатия кнопки "Играть" игроков кидало в одно лобби с заранее установленным адресом вебсокета, айди лобби можно убрать, если будет мешать, на данном этапе он не нужен
const WebSocket = require('ws');
const os = require('os');

function generateLobbyId() {
  return Math.random().toString(36).substr(2,6).toUpperCase();
}

function broadcastToLobby(lobbyId, data) {
  if (!lobbies[lobbyId]) return;
  lobbies[lobbyId].clients.forEach(client => {
    if (client.readyState === WebSocket.OPEN) {
      client.send(JSON.stringify(data));
    }
  })
}

function getLocalIp() {
  const interfaces = os.networkInterfaces();
  for (const name of Object.keys(interfaces)) {
    for (const net of interfaces[name]) {
      // Пропускаем внутренние и не-IPv4 интерфейсы
      if (net.family === 'IPv4' && !net.internal) {
        return net.address;
      }
    }
  }
  return 'localhost'; // Fallback
}

const LOCAL_IP = getLocalIp();
const PORT = 8080;

const lobbies = {};

const wss = new WebSocket.Server({ host: '0.0.0.0', port: PORT });

wss.on('connection', (ws) => {
  ws.lobbyId = null;

  ws.on('message', (message) => {
    let msg;
    try {
      msg = JSON.parse(message);
    } catch(e) {
      ws.send(JSON.stringify({error: 'Invalid message format, must be JSON'}));
      return;
    }

    if (msg.command === 'create_lobby') {
      const lobbyId = generateLobbyId();
      lobbies[lobbyId] = { clients: new Set() };
      lobbies[lobbyId].clients.add(ws);

      ws.send(JSON.stringify({ command: 'lobby_created', lobbyId}));
      broadcastToLobby(lobbyId, {
        command: 'player_joined',
        playersCount: lobbies[lobbyId].clients.size 
      });
      console.log(`Lobby ${lobbyId} created`);

    } else if (msg.command === 'join_lobby') {
      const { lobbyId } = msg;
      if (!lobbyId || !lobbies[lobbyId]) {
        ws.send(JSON.stringify({ error: 'Lobby not found'}));
        return;
      }

      lobbies[lobbyId].clients.add(ws);
      ws.lobbyId = lobbyId;

      ws.send(JSON.stringify({
        command: 'player_joined',
        playersCount: lobbies[lobbyId].clients.size 
      }));
      console.log(`Client joined lobby ${lobbyId}`);

    } else if (msg.command === 'chat_message') {
      if (!lobbyId || !lobbies[lobbyId]) {
        ws.send(JSON.stringify({ error: 'You are not in any lobby'}));
        return;
      }
      broadcastToLobby(ws.lobbyId, { command: 'chat_message', text: msg.text });

    } else {
      ws.send(JSON.stringify({ error: 'Unknown command'}));
    }

    //console.log(`Received: ${message}`);
    // Отправить это сообщение всем подключенным клиентам
    // wss.clients.forEach((client) => {
    //   if (client.readyState === WebSocket.OPEN) {
    //     lient.send(message);
    //   }
    // });
  });

  ws.on('close', () => {
    const lobbyId = ws.lobbyId;
    if (lobbyId && lobbies[lobbyId]) {
      lobbies[lobbyId].clients.delete(ws);
      broadcastToLobby(lobbyId, {
        command: 'player_left',
        playersCount: lobbies[lobbyId].clients.size
      });

      if (lobbies[lobbyId].clients.size === 0) {
        delete lobbies[lobbyId];
        console.log(`Lobby ${lobbyId} deleted (empty)`);
      }
    }
  });
});

console.log(`WebSocket server is running on:
  Local: ws://localhost:${PORT}
  Network: ws://${LOCAL_IP}:${PORT}`);