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!!!