Ver Mensaje Individual
  #5 (permalink)  
Antiguo 13/01/2014, 12:04
dunga007
 
Fecha de Ingreso: febrero-2009
Mensajes: 151
Antigüedad: 15 años, 10 meses
Puntos: 1
Respuesta: Callback node.js

Cita:
Iniciado por utan Ver Mensaje
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 original
  1. socket.on('disconnect', function ()
  2.         {
  3.             //usas en vez del id del db, la timestamp de su reciente login
  4.             delete usuariosConectados[socket.timestamp];           
  5.             //Mandamos la información a las Sockets para que se borre de la lista
  6.             socket.broadcast.emit("usuarioDesconectado",socket.identificador);
  7.         });

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 original
  1. var clients = {};
  2.    
  3.     server.on( 'connection' , function( socket ){
  4.         // obtenemos de la BD
  5.         //db.id , db.screen_name,db.timestamp
  6.         for ( i in clients ){
  7.             // si no existe crear nuevo
  8.             if( clients[i] && clients[i].id !== db.id ){
  9.                 socket.identifier   =   db.timestamp;
  10.                
  11.                 clients[db.timestamp] = {
  12.                     id          : db.id,
  13.                     screen_name   : db.screen_name,
  14.                     sockId      : socket.id,
  15.                      timestamp  :db.timestamp
  16.                 }
  17.             }else{
  18.             // inicializa el disconnect de el socket antiguo
  19.             var old_socket  =   socket.sockets.sockets[clients[i].sockId];
  20.                 old_socket.json.emit('user_lef' , 'user left the app');
  21.                 old_socket.disconnect();
  22.             }          
  23.            
  24.         }
  25.        
  26.        
  27.         server.on('disconnect' , function(){
  28.             if( clients[socket.timestamp] ) delete clients[socket.timestamp];
  29.         });
  30.     });
Muy biena idea!, lo voy a intentar y te cuento como me va. Gracias!