Socket.io: пользователи не совпадают друг с другом в одной комнате - PullRequest
0 голосов
/ 08 июня 2019

У меня есть простое приложение чата с несколькими функциями, и одна из них: Найти другого партнера . так что это приложение работает хорошо, когда оно используется нормально, например, есть комнаты только для 2 пользователей, и когда комната заполняется, число, которое определяет приращение имени комнаты. (например, имя комнаты: «1», когда количество клиентов достигает 2, номер комнаты меняется на «2»). но если пользователь нажимает эту кнопку «Найти следующего партнера» слишком много раз, а затем подключается второй пользователь, то, считая, что они находятся в одной комнате, они не могут соединиться друг с другом. почему это происходит?

вот код: (на стороне сервера)

 //chnm is io.of('/namespace')
 //numb equals to 1 at the beginnin
 socket.on('next', function(){
    socket.leave(socket.current_room)
    console.log("left room: ", socket.current_room);
    chnm.in(socket.current_room).emit('off'); 
    console.log(numb)
    //room = numb
    socket.join(numb);
    socket.current_room = numb
    console.log("Joined room: ", numb);
    chnm.in(numb).clients((err, clients)=>{
      if(clients.length < 2){         
        chnm.in(socket.current_room).emit('wait')
      }
      if(clients.length >= 2){
        ++numb
        chnm.in(socket.current_room).emit('stop waiting')
        console.log('partners found each other')
      }
    })
  })

и события на стороне клиента (stop waiting и wait)

socket.on("wait", function () {
  document.getElementById("waiting").style.display = "inline";
  document.getElementById("message").disabled = true;
  document.getElementById("send").disabled = true;
});

socket.on("stop waiting", function () {
  document.getElementById("waiting").style.display = "none";
  document.getElementById("message").disabled = false;
  document.getElementById("send").disabled = false;
});

что не так? Мне действительно нужна помощь в этом плане, поэтому, если я ее получу, буду благодарен.

EDIT : когда два пользователя не совпадают друг с другом в одной комнате и третий подключается, он подключается ко второму пользователю, но когда первый пользователь (который слишком много раз нажимал кнопку FOP, снова нажимает кнопку FOP, user2 и user3 отключаются друг от друга. и я думаю, это потому, что в комнате как-то 3 человека. Вот код, который определяет, должен ли номер комнаты увеличиваться или нет

chnm.on('connection', async function(socket){
  var room = numb;
  socket.join(room);
  socket.current_room = room;

   chnm.in(room).clients(function(err, clients) {
      if (clients.length < 2) {
         chnm.in(socket.current_room).emit('wait')
      }
      if (clients.length >= 2) {
          ++numb;
          chnm.in(socket.current_room).emit('stop waiting'); 
        }
    });
....
...