Как связать socket.id с элементом массива? - PullRequest
0 голосов
/ 08 мая 2020

Я пытаюсь создать чат-комнату, где имена подключенных пользователей отображаются в разделе «Пользователи в сети».

Приведенный ниже код добавит имя каждого пользователя в массив и отобразит его содержимое.

Однако, если пользователь уходит, его имя пользователя не удаляется из массива. Если я вытолкну массив, он, скорее всего, не удалит правильное имя пользователя. Это заставляет меня думать, что я должен каким-то образом связать идентификатор сокета с заданным именем пользователя и создать событие отключения, которое удаляет правильное имя пользователя из массива и отображает обновленную версию массива. Как я мог изменить этот код, чтобы включить это?

скрипт. js:

var user = user;
if (!user) {
  user = prompt('Please choose a username:');
  if (!user) {
    alert('Your name has been set to "Anonymous"');
    user = "Anonymous"
        items.push(user);
  } else {
      alert('Your name has been set to "'+ user +'"');
  } 
}

socket.emit('theitems', user);

socket.on('theitems', function (data) {
      $('.dispUser').html(data);
      console.log(data);
    });

сервер. js:

var newitems = [];
server(socket('theitems', ctx => { newitems.push(ctx.data); console.log(ctx.data); ctx.io.emit('theitems', newitems); }));

1 Ответ

0 голосов
/ 08 мая 2020

Я считаю, что при подключении пользователя вы обновляете свой массив пользователей новым пользователем, например:

let users = [];

sockets.on('connection', socket) => {
    // This is the user associated with a new socket connection. 
    // User that you will need to remove when connection is closed.
    const user = { /* create your user */ };
    users.push(user);

    // Then you can subscribe to socket disconnect event
    socket.on('disconnect', () => {
        users = users.filter(u => u !== user); // removing disconnected user

        // And then here you can notify your front-end with an updated users array
    });
});

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...