Handle browser reload socket.io

后端 未结 1 1728
猫巷女王i
猫巷女王i 2020-12-02 17:13

There is a way in socket.io to create a timeout in the disconnected event, then check if the user has been reconnected ?

The idea is to emit data / save user state i

相关标签:
1条回答
  • 2020-12-02 18:09

    There is a socket.on('disconnect', function () { ... });. So you can just do

    socket.on('disconnect', function () {
        setTimeout(function () {
             //do something
        }, 10000);
    });
    

    EDIT 1:

    I get it now. So maybe you should do something like this:

    Client:

    //right after connection
    socket.emit('register', localstorage.getItem('gameUniqueId'));
    
    //somewhere, when game starts
    var randomlyGeneratedUID = Math.random().toString(36).substring(3,16) + +new Date;
    localStorage.setItem('gameUniqueId', randomlyGeneratedUID);
    

    Server:

    io.sockets.on('connection', function (socket) {
        var player = null;
    
        socket.on('register', function (data) {
            if (data !== null) {
                //there was something in localstorage
                if (game.Players.existsUID(data)) {
                    player = game.Players.getByUID(data);
                    player.disconnected = false;
                } else {
                    //timed out, create new player
                }
            } else {
                //localStorage is not set, create new player
            }
        });
    
        socket.on('disconnect', function () {
            player.disconnected = true;
            setTimeout(function () {
                if (player.disconnected) player.delete();
            }, 10000);
        });
    });
    
    0 讨论(0)
提交回复
热议问题