hola,
Ok, mira te borra el disconnect el usuario porque estas usando el mismo id de la base de datos..
La nueva ventana y el socket anterior utilizan el mismo id de la base de datos, por lo tanto cuando el nuevo entra el otro emite un disconnect y como el id es el mismo de la bd borra el que acaba de entrar..
Lo que tienes que hacer es re trabajar en tu lógica ya que no la puedes trabajar así...
Una idea seria que crearas otra row en tu base de datos y que esta tuviera un timestamp del nuevo login, el mismo id del usuario lo tendrías y no molestaría tu código mucho..
y podrías comprobar algo así.
Código Javascript
:
Ver originalsocket.on('disconnect', function ()
{
//usas en vez del id del db, la timestamp de su reciente login
delete usuariosConectados[socket.timestamp];
//Mandamos la información a las Sockets para que se borre de la lista
socket.broadcast.emit("usuarioDesconectado",socket.identificador);
});
Usas en vez del id del db, la timestamp de su antiguo login el cual es el mismo id de la db del usuario pero la timestamp lo define como diferente .. así no borrara al mas reviente en tu objeto..
Este es un ejemplo mas claro de mi idea , puede haver bugs:
Código Javascript
:
Ver originalvar clients = {};
server.on( 'connection' , function( socket ){
// obtenemos de la BD
//db.id , db.screen_name,db.timestamp
for ( i in clients ){
// si no existe crear nuevo
if( clients[i] && clients[i].id !== db.id ){
socket.identifier = db.timestamp;
clients[db.timestamp] = {
id : db.id,
screen_name : db.screen_name,
sockId : socket.id,
timestamp :db.timestamp
}
}else{
// inicializa el disconnect de el socket antiguo
var old_socket = socket.sockets.sockets[clients[i].sockId];
old_socket.json.emit('user_lef' , 'user left the app');
old_socket.disconnect();
}
}
server.on('disconnect' , function(){
if( clients[socket.timestamp] ) delete clients[socket.timestamp];
});
});