Я столкнулся с чем-то очень странным с моим кодом. У меня есть функция, которая обновляет чат с помощью сокетов. Все работало отлично, пока я не получил количество клиентов в комнате.
function updateChatRoom(user, gender, vip, firstname, message, latitude, longitude, room, updateUser)
{
const messageDetails =
{
gender: gender,
vip: vip,
firstname: firstname,
content: message
}
/*********** IF I DELETE THIS IF STATMENT, IT SENDS TO THE USER ********/
if (user.in('/').adapter.rooms[room].length)
{
messageDetails.roomLength = user.in('/').adapter.rooms[room].length;
}
/*********** IF I DELETE THIS IF STATMENT, IT SENDS TO THE USER ********/
if (latitude && longitude && typeof latitude == 'number' && typeof longitude == 'number')
{
messageDetails.latitude = latitude;
messageDetails.longitude = longitude;
}
if (updateUser)
{
console.log("sending to user"); //Always runs, regardless if the if statment is there or not
user.emit('incomingChatMessage', messageDetails); //I only receive this if i delete that if statment
}
user.in(room).broadcast.emit('incomingChatMessage', messageDetails); //Always runs
}
Так что, если вы можете видеть это утверждение в середине. Это количество людей в этой комнате. Из тестирования и отладки я вижу, что это правильно. Однако, когда он там, user.emit не запускается, или если он это делает, он ничего не отправляет пользователю.
Я знаю, что updateUser также имеет значение true, потому что он всегда регистрирует «Отправка пользователю» на консоль.
Если я просто удаляю оператор if, он отправляется нормально. Мое единственное предположение, что когда я проверяю длину комнаты, я изменяю свойство пользователя, чтобы оно больше не отправлялось ему? Понятия не имею.
Кроме того, последняя строка, которая выдает сообщение всем в комнате, кроме клиента, работает с оператором if или без него.