2016-04-14 17 views
0

ユーザーは一度に1つの部屋にいることを保証したいと思いますが、私はこの問題を抱えています。私はソケットが、現在ではすべての部屋のリストを取得することができないまで問題を煮ているsocket.io:ソケットに1つの部屋しかありません

私の現在の戦略は、このような何かを行うことです:。

io.on('connection', function(socket) { 
    console.log('A user just connected with id ' + socket.id); 
    socket.on("change room", function(data) { 
     // this SHOULD return a list of all rooms this user is in 
     var socketsRooms = socket.rooms; 
     console.log(socket.rooms) //{ '/#3tE4Up5PRbTfsU0JAAAD': '/#3tE4Up5PRbTfsU0JAAAD' } 
     console.log(typeof socket.rooms) // object 
     // Loop through the rooms and leave them 
     for (var room in socketsRooms) { 
      console.log('LEAVING ROOM: ', room); 
      socket.leave(room); 
     } 

     // Join the new room 
     socket.join(data.newroom); 
    }); 
    socket.on('disconnect', function() { 
     console.log('user ' + socket.id + ' disconnected'); 
    }); 
}) 

がで問題がありますsocket.roomsのドキュメント?それは、ソケットが接続されている部屋の配列を返す必要がありますが、私はidオブジェクトとしてデータを取得します。 EX: { '/#3tE4Up5PRbTfsU0JAAAD': '/#3tE4Up5PRbTfsU0JAAAD' }

...私はSocket.io github pageオン['issues']

のようなものを期待する私の場合socket.roomsの説明は、次のように述べています

このソケットがある部屋を特定する文字列のハッシュ、 ルーム名でインデックスされています。私はすでにfolowing質問をチェックアウトした

重複としてマークする前に

  1. How to leave all rooms that the socket is connected to at one go in Node.js
  2. socket.io: assure socket joins only one room at a time

が最初の質問への答えはと思われます私はかなりそれがbecausを動作すると確信していますeは、私たち自身のリストを保持していると仮定していますが、socket.ioをそのメソッドに対して使用している作業用ソリューションを好むでしょう。

私は

答えて

1

socket.ioで(それが全く出て助けている場合)、各ソケットはまた、自身の部屋に接続されたクライアント上のangular2ベータとsocket.io v1.4.5の最新のverionを使用しています。この部屋の名前はsocket.idです。だから、部屋を出るときは、自分の部屋を離れないようにしてください。

for(room in socket.rooms){ 
    if(socket.id !== room) socket.leave(room); 
} 
socket.join(data.newroom, function(){ 
    console.log('rooms', socket.rooms); // here you'll see two rooms: one with socket.id and another with data.newroom 
}); 
関連する問題