Listado de usuarios en una sala de socket.io

Cuando entramos a un chat, una de las partes fundamentales es ver la lista de usuarios, pues bien, en éste artículo vamos a capturar dichos usuarios que hay en una sala mediante socket.io.

Si nos vamos a la documentación (wiki), a la sección de manejo de rooms, podemos leer lo siguiente: If you want a list of clients in a particular room, call io.sockets.clients('room'). This will return Socket instances of all clients in the room.Sin embargo, no hay más información.

Pasamos al código y explicamos un poco:

var users = io.sockets.clients(socket.room);
var list_users = [];
		
users.forEach(function(client){			
	list_users.push(client.username);		
});

¿Por qué hacemos ésto?
La respuesta es sencilla. Nosotros queremos una lista de usuarios para posteriormente enviarla, por ejemplo con socket.broadcast.to(socket.room).emit(‘mi_funcion’, list_usuarios) y aquí nos encontramos el problema ya que io.sockets.clients(socket.room) nos devuelve un Object y eso no podemos enviarlo tal cual.

¿Solución?
Pues facil:
1º. Guardamos dicho Object en una variable.
2º. Creamos el array que será lo que enviemos.
3º. Recorremos el Objeto (users) para convertirlo en el array.

De esta forma tenemos un array con el listado de usuarios que podremos envíar al cliente

Deja un comentario