Я пытаюсь обнаружить игрока, когда игрок принудительно закрывает / выходит из игры, и в этом случае я хочу выйти из системы этого конкретного игрока (сокета) через некоторое время (например, 10 секунд).
Всякий раз, когдаигрок выходит из игры, этот код выполняется:
socket.on('disconnect',() => {
delete SOCKET_LIST[socket.id];
Player.onDisconnect(socket);
});
Player.onDisconnect = (socket) => {
let player = Player.list[socket.id];
if(!player) return;
if(!player.canLogOut) {
//Log out this particular player(socket) after (ex: 10 seconds) ?
}
//the code below must not be executed if !player.canLogOut - instead
//execute code in the if block above using settimeout or any other method ?
delete Player.list[socket.id];
removePack.player.push(socket.id);
for(let i in SOCKET_LIST){
let packs = Entity.getFrameUpdateData();
let rsocket = SOCKET_LIST[i];
rsocket.emit('remove',packs.removePack);
}
}
Я ловлю принудительное закрытие клиента / выход из системы в блоке if (! player.canLogOut), но как мне установить таймер дляВыйти / удалить / удалить только этот конкретный плеер / сокет?Я попытался поместить код для нормального выхода из системы в функции settimeout внутри блока if (! Player.canLogOut, но он не работает, потому что код после функции settimeout все еще выполняется в то же время и когда функция settimeoutсрабатывает после секунды "X", удалить нечего, потому что сокет уже удален. Есть идеи? Спасибо.