express-socket.io-session icon indicating copy to clipboard operation
express-socket.io-session copied to clipboard

Keep session when we refresh page

Open ithtan558 opened this issue 7 years ago • 0 comments

Hi Admin, I am following this package and I have a problem with session in socket I can not keep value session when I refresh page cause it will be create new connection on socket.

I do not how to keep value in session

Look at my code

var app = require('express')(), server = require("http").Server(app), io = require("socket.io")(server), redis = require('redis'), session = require("express-session")({ secret: "my-secret", resave: true, saveUninitialized: true }), sharedsession = require("express-socket.io-session");

server.listen(3000, function () { console.log('listen on 3000'); });

// Attach session app.use(session);

// Share session with io sockets

io.use(sharedsession(session));

var redisClient = redis.createClient(6379, '192.168.180.237'); //var redisClient = redis.createClient(6379, '10.149.47.110'); redisClient.subscribe('message'); var global_scoket;

io.on("connection", function(socket) { console.log('A new connect' + socket.id); global_scoket = socket; });

redisClient.on("message", function (channel, message) { message = JSON.parse(message); console.log(message.type);

if (message.type == 'conversationUserTurn' && message.data.conversation_id) {

    if (!global_scoket.handshake.session.conversations) {
        console.log('create_conversations');
        global_scoket.handshake.session.conversations = [];
    }
    // Calculator how many seconds reset
    var conversation_user_turn = message.data.conversation_user_turn;
    var updated_date = (conversation_user_turn.updated_date * 1000) + 30000;
    var end_time = updated_date - Date.now();

    console.log(global_scoket.handshake.session.conversations);
    if (end_time <= 0) {
        console.log(end_time);
        io.sockets.emit('timer:finish:' + message.data.conversation_id, {conversation_user_turn: conversation_user_turn});
    } else {
        console.log(end_time);
        if (!global_scoket.handshake.session.conversations[message.data.conversation_id]) {
            global_scoket.handshake.session.conversations.push(message.data.conversation_id);
            global_scoket.handshake.session.save();
            console.log(global_scoket.handshake.session.conversations);
            setInterval(function () {
                end_time--;
                io.sockets.emit('timer:' + message.data.conversation_id, {end_time: end_time});
                if (end_time == 0) {
                    io.sockets.emit('timer:finish:' + message.data.conversation_id, {conversation_user_turn: conversation_user_turn});
                }
            }, 1000);
        }
    }
    io.sockets.emit(channel + ':' + message.type, message.data);

} else if (message.data.conversation_id) {

    // Handle for detail conversation
    io.sockets.emit(channel + ':' + message.type + ':' + message.data.conversation_id, message.data);

} else {

    // Handle for add conversation and conversation user
    io.sockets.emit(channel + ':' + message.type, message.data);

}

});

ithtan558 avatar Aug 10 '17 06:08 ithtan558