Функция тайм-аута Nodejs для выхода из плеера в socket.io - PullRequest
0 голосов
/ 15 февраля 2019

Я пытаюсь обнаружить игрока, когда игрок принудительно закрывает / выходит из игры, и в этом случае я хочу выйти из системы этого конкретного игрока (сокета) через некоторое время (например, 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", удалить нечего, потому что сокет уже удален. Есть идеи? Спасибо.

...