[英]Socket.io how to get room id
I have problem, i want to get ONLY room id 我有问题,我想只得到房间ID
I know about io.sockets.manager.rooms
but it returns object :/ 我知道io.sockets.manager.rooms
但它返回对象:/
In code (i send a list of rooms to client and he checks id) 用代码(我将房间列表发送给客户,他检查ID)
io.sockets.on('connection', function(socket) {
socket.join('main');
socket.emit('start',io.sockets.manager.roomClients[socket.id]);
});
and client: 和客户:
var socket = io.connect('http://localhost:3250');
socket.on('start', function(data) {
panel.innerHTML = data;
}
THE SOLUTION IS: 解决方案是:
var keys = function( object ) {
if ( !(object && typeof object === 'object') ) {
return null;
}
var result = [];
for (var key in object) {
if (object.hasOwnProperty(key)) {
result.push(key)
}
}
return result;
}
var obiekt = io.sockets.manager.rooms;
socket.emit('rooms', keys(obiekt))
I'm not 100% sure what you need here. 我不确定100%是否需要这里。 Do you want to return an array of room names? 您要返回房间名称数组吗? If so, you can just get the keys from the object returned by io.sockets.manager.rooms, eg using a helper function provided by Underscore: 如果是这样,您可以从io.sockets.manager.rooms返回的对象中获取密钥,例如使用Underscore提供的帮助器函数:
socket.emit('rooms', _.keys(io.sockets.manager.rooms) );
EDIT: I've used Underscore here, but you can also code your own keys function, by looping through the objects properties, with something like this: 编辑:我在这里使用了下划线,但是您也可以通过循环对象属性来编写自己的按键功能,如下所示:
var keys = function( object ) {
if ( !(object && typeof object === 'object') ) {
return null;
}
var result = [];
for (var key in object) {
if (object.hasOwnProperty(key)) {
result.push(key)
}
}
return result;
}
Note that this might miss some edge cases, but you get the idea 请注意,这可能会遗漏一些边缘情况,但您可以理解
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.