Первоначальные тесты нашей игры прошли успешно на ПК, но после того, как мы пригласили некоторых мобильных пользователей играть, приложение упало.
Мы запускаем 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 .
Я знаю, что эти сбои происходят из-за неопределенных значений, но я не могу 'не может найти причину, кроме проблем с подключениемВторая ошибка говорит о том, что не вошедшие в игру игроки пытаются перейти в несуществующие игровые сессии, несмотря на то, что они всегда должны удаляться первыми после того, как любой игрок покинет игру.Что может их вызвать?