11496 sujets

JavaScript, DOM et API Web HTML5

Bonjour à tous !
Contexte :
j'ai un problème avec node.js.
Je dois faire un formulaire qui marche à la manière d'un powerpoint slide by slide.
Mon formulaire est decrit dans un JSON lorsque qu'un utilisateur se connecte je charge le json et je sers la première question à l'utilisateur. Lorsque l'utilisateur clique sur "next" je lui sers logiquement le deuxieme slide.
Jusque là tout fonctionne.
Le problème apparait quand j'ai 2 utilisateurs connectés sur l'application : je me suis rendu compte qu'ils partageaient la même variable et donc lorsque l'utilisateur 2 se connecte dans l'exemple si dessus la question 3 lui sera demandé au lieu de la question 1.
Fin contexte
Un peu de code pour bien comprendre :
la partie qui va nous intéresser dans app.js


io.sockets.on('connection', function(socket) {
    var form = require('./controllers/form');
    form.init();
    
    socket.on('next', function(data) {
        socket.emit('next', form.next());
    });
});

la partie qui va nous intéresser dans form.js

var formController = {
    'form': [],
    'lookup_part_iterator': 0,
    'lookup_diapo': {},
    'lookup_diapo_iterator': 0,
    'init': function() {/*stuff*/},
    'next': function() {/*stuff*/},
    'end': function() {/*stuff*/},
    'get_next_slide': function() {/*stuff*/},
    'iterate_slide': function() {/*stuff*/},
    'iterate_part': function() {/*stuff*/},

}


Pistes que j'ai trouvé pour résoudre mon problème :
gérer un tableau de form avec comme indice l'id de la session utilisateur
Mais je trouve ça lourd et je pense qu'il y a une meilleur solution pour gérer ce problème; je m'en remets donc à vous !
J'ai trouvé un moyen mais je sens que c'est pas le bon, voici LE CODE :
dans app.js

io.sockets.on('connection', function(socket) {

    var form = require('./controlers/form');
    form.init();
    var form_copy = _.extend({},form);
    socket.set( socket.id, form_copy, function() {
        console.log("form setted");
        socket.on('next', function(data) {
            console.log("next");
            socket.get( socket.id,function(error,form_socket){
                console.log("form getted"+error);
                 console.log(form_socket);
                socket.emit('next', form_socket.next());
            });
            
        });
    });


});


j'ai rajouté socket.get et socket.set pour identifier ma variable form sur l'id de la socket (oui c'est plus marrant au féminin). Et parce que socket.set passe l'objet form par reference obligé de faire une copie avant <-- c'est ça que je trouve pas propre.