2013-07-31 83 views
2

我有问题,我想ONLY房间IDSocket.io如何让房间ID

我知道io.sockets.manager.rooms但它返回对象:/

在代码(我送的列表房间客户端和他检查ID)

io.sockets.on('connection', function(socket) { 

    socket.join('main'); 
    socket.emit('start',io.sockets.manager.roomClients[socket.id]);  

}); 

和客户端:

var socket = io.connect('http://localhost:3250');       
     socket.on('start', function(data) {  
      panel.innerHTML = data; 
       }  

解决的办法是:

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)) 

回答

1

我不是100%肯定您这里需要。你想返回一组房间名称吗?如果是这样,您可以从io.sockets.manager.rooms返回的对象中获取密钥,例如使用下划线提供的辅助函数:

socket.emit('rooms', _.keys(io.sockets.manager.rooms)); 

编辑:我用下划线在这里,但你也可以编写自己的按键功能,通过该对象的属性循环,像这样的东西:

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; 
} 

请注意,这可能会遗漏一些边缘情况,但您的想法是

+0

是是的我的意思是!但我有你的代码的问题,我得到错误:'ReferenceError:_未定义' – Adacho

+0

我拿[Underscore](http://underscorejs.org/)作为示例帮助程序库来获取“键”功能,你必须将该库添加到您的项目才能使用它。 – axelcdv

+0

我改变了一点功能,我有: – Adacho