2016-04-07 2 views
0

Я экспериментирую с node.js socket.io и разными комнатами. У меня есть объект псевдонимов со всеми подключенными пользователями, но проблема в этом объекте. Я не могу хранить повторяющиеся значения для идентификаторов пользователей, поэтому я не могу заставить одного и того же пользователя использовать разные комнаты. Теперь я хотел бы сделать другой объект для каждой комнаты вместо этого объекта псевдонимов для всех пользователей. Итак, как я могу сделать что-то вроде этого: nicknames [specific_room] [user.id] = остальная часть кода ..? Итак, тогда у меня должен быть отдельный список данных для каждой комнаты? Или я должен использовать динамические имена переменных для каждой отдельной комнаты? Что вы можете предложить?Node.js многомерные имена объектов и динамических переменных

nicknames[user.id]={ 

     'nickname': user.name, 
     'socketId': socket.id, 
     'room': room, 
}; 

результат:

{ '1': 
     { nickname: 'User1', 
     socketId: '/#0rb7zbg0RInwKAaMAAAC', 
     room: '4444', 
     }, 
     '3': 
     { nickname: 'User 2', 
     socketId: '/#tGZPL8IUPvUoie1CAAAD', 
     room: '3333', 
     } 
} 

Что бы я хотел достигнуть:

{ 3333 {  { '1': 
       { nickname: 'User1', 
       socketId: '/#0rb7zbg0RInwKAaMAAAC', 

       }, 
       '3': 
       { nickname: 'User 2', 
       socketId: '/#tGZPL8IUPvUoie1CAAAD', 

       } 
     } 
    } 

    4444 { 
    } 
} 

где 3333 и 4444 являются номер уникальные идентификаторы. Надеюсь, я дал понять.

+0

Существует что-то например 'socket.join (room_id_here)' и 'socket.leave (room_id_here)'. Присоединиться добавит пользователя в идентификатор комнаты, который указан и уйдет, удалит пользователя из этой комнаты. Я тоже экспериментирую с NodeJS и socket.io :) – Jer

ответ

0

Я не испытывал с Socket.io, но вы можете легко сделать что-то подобное с простым JavaScript (вероятно, не самый элегантным решением, но оно работает отлично):

var obj = { 
    '1': { 
    nickname: 'User1', 
    socketId: '/#0rb7zbg0RInwKAaMAAAC', 
    room: '4444', 
    }, 
    '3': { 
    nickname: 'User 2', 
    socketId: '/#tGZPL8IUPvUoie1CAAAD', 
    room: '3333', 
    } 
}; 

var obj2 = {}; 


for(var i in obj) { 
    obj2[obj[i].room] = {}; 
    obj2[obj[i].room][i] = { 
    nickname: obj[i].nickname, 
    socketId: obj[i].socketId 
    }; 
} 

console.log(obj2); 

JSFiddle

Смежные вопросы