Is it possible to get rooms which socket is currently in, without calling
io.sockets.clients(roomName)
for every room name and looking for
Version 2.0.3
io.sockets.sockets[yourSocketID].rooms
That equal with
socket.rooms
socket.io 1.7.3 +
var currentRoom = socket.rooms[Object.keys(socket.rooms)[0]];//returns name of room
Socket.io v2.1.1
So make sure you aren't accessing the sockets rooms in the disconnect
event like I was, as they have already left the rooms by the time that event is triggered. If you want to do that try it in the disconnecting
event - https://github.com/socketio/socket.io/pull/2332/files
Then you can use any of the following:
Object.keys(socket.adapter.rooms)
Object.keys(socket.adapter.sids)
Object.keys(socket.rooms)
1.4.5 version => io.sockets.adapter.rooms[roomname].sockets
From the Socket.IO Room doc:
io.sockets.manager.roomClients[socket.id]
Being sure that socket is in only one room at a time, my solution was:
var currentRoom = Object.keys(io.sockets.adapter.sids[socket.id]).filter(item => item!=socket.id);