Ver Mensaje Individual
  #1 (permalink)  
Antiguo 11/01/2014, 18:23
dunga007
 
Fecha de Ingreso: febrero-2009
Mensajes: 151
Antigüedad: 15 años, 3 meses
Puntos: 1
Callback node.js

Hola!, tengo un problema bastante avanzado..., espero me puedan ayudar, se los planteo:

Estoy haciendo un chat para usuarios que tengo en una base de datos, el desafio:

Hacer que cuando el mismo usuarios se conecte desde otra hubicacion cierre la sesion que tenia abierta e incie la nueva

Lo que tengo es:

Cuando un usuario se conecta:

Código HTML:
for (i in usuariosConectados)
                {
                   if(usuariosConectados[i].id == rows[0].id) {
                      //le envio un mensaje a la hubicacion anterior informandoleio.sockets.socket(usuariosConectados[i].socket).emit("alerta_desconectar");
                   }
                }

                //Lo agrego al objeto
                usuariosConectados[rows[0].id]={
                                        'id':rows[0].id,
                                        'nombre': rows[0].display_name,
                                        'socket': socket.id,                                            
                                        };
Como se puede ver primero reviso si el usuario estaba conectado, en caso de estar conectado, llamo a la funcion alerta_desconectar como se muestra arriba, esta funcion del lado del cliente es:

Código HTML:
function alerta_desconectar(){
                alert("Se ha cerrado la sesion porque ha iniciado sesion  desde otra ubicacion, pestaña o ventana");
                socket.emit('desconectar');
             }
y desde esta funcion se llama a la funcion desconectar en el servidor que es:

Código HTML:
socket.on('desconectar', function()
    {
      socket.disconnect()
    });
Y luego continuo agregando el usuario al objeto usuariosConectados.

Parece que todo va bien pero al forzar la desconeccion se dispara automaticamente la funcion socket.on('disconnect') que tengo tambien definida y que lo que hace es, quitar al usuario de la lista de conectados y borrarlo del objeto usuariosConectados. La consecuencia:

Al ingresar el cliente desde otra hubicacion:
a) lo desconecta de la hubicacion anterior
b) borra al usuario actual del objeto usuariosConectados provocando que todo ande mal

Se me ocurrio solucionarlo con callbacks para que no agrege la nueva conexion al objeto usuariosConectados hasta que haya terminado con todo ese proceso pero nose como deberia hacerlo ni si es la mejor opcion o la mas correcta, espero alguien pueda ayudarme ya que este problema excede mis conocimientos. Muchisimas gracias!!!