Игра на сервере Heroku, приводящая к сбою во время игры мобильных пользователей - PullRequest
0 голосов
/ 03 апреля 2019

Первоначальные тесты нашей игры прошли успешно на ПК, но после того, как мы пригласили некоторых мобильных пользователей играть, приложение упало.

Мы запускаем Node.js с Express на Heroku, и сбой производит ихошибки:

Ошибка типа: невозможно прочитать свойство 'псевдоним' с неопределенным

в Socket.socket.on (/app/src/Server/SocketManager.js:138:36)

TypeError: Невозможно прочитать свойство 'readyCounter' с неопределенным

в Socket.socket.on (/app/src/Server/SocketManager.js:193:27)

Они происходят довольно неожиданно и означают, что socket.user и game [game.id] не определены, но я не знаю, как это вообще возможно?Что-то должно быть причиной разрыва соединения.Это может быть связано с тем, что игроки были на своих мобильных телефонах.

Я хотел обернуть все в заявлениях try / catch, но я не верю, что это действительно решение.

Части кода, в которых отображаются ошибки:

socket.on(INVITATION, ({ id = null, socketId = null }) => {
        //! TypeError: Cannot read property 'nickname' of undefined
        let nickname = socket.user.nickname
        let fromSocketId = socket.user.socketId
        if (socket.user.id === id) {
            console.log(`[ERROR] ${nickname} tried to invite himself.`)
        } else {
            console.log(`[INVITATION] from ${socket.user.id} to ${id}.`)
            socket.to(socketId).emit(INVITATION, {
                socketId: fromSocketId,
                nickname
            })
        }
    })
socket.on(WALKTHROUGH_READY, ({ gameId }) => {
    //!TypeError: Cannot read property 'readyCounter' of undefined
    if (games[gameId].readyCounter === 1) {
        io.in(gameId).emit(GAME_STARTED, { game: games[gameId] })
    }
    games[gameId].readyCounter = 1
})

Код выше находится в / src / Server / SocketManager.js .

Вот репозиторий со всем кодом и вот логи heroku .

Я знаю, что эти сбои происходят из-за неопределенных значений, но я не могу 'не может найти причину, кроме проблем с подключениемВторая ошибка говорит о том, что не вошедшие в игру игроки пытаются перейти в несуществующие игровые сессии, несмотря на то, что они всегда должны удаляться первыми после того, как любой игрок покинет игру.Что может их вызвать?

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