оператор if блокирует сокет от отправки сообщений клиенту - PullRequest
0 голосов
/ 03 мая 2018

Я столкнулся с чем-то очень странным с моим кодом. У меня есть функция, которая обновляет чат с помощью сокетов. Все работало отлично, пока я не получил количество клиентов в комнате.

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 или без него.

1 Ответ

0 голосов
/ 03 мая 2018

Поместите код if в блок try...catch и распечатайте исключение в журнале консоли. Я думаю, что где-то в вашем коде у вас есть и блок try...catch, где catch пуст и ничего не делает.

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