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, };
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'); }
Código HTML:
socket.on('desconectar', function() { socket.disconnect() });
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!!!