У меня есть простое приложение чата с несколькими функциями, и одна из них: Найти другого партнера . так что это приложение работает хорошо, когда оно используется нормально, например, есть комнаты только для 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');
}
});
....