2017-01-16 11 views
1

私は、すべてのクライアントデータを取得し、例を与えるためにゲームNodejs socket.io - すべてのソケットを取得してプロパティを比較するには?

コード受賞者を決定するために、特定のプロパティを比較する必要があります:私はプレイヤーのスコアを増加さ

socket.on('joinedRoom', function(roomData){ 
    socket.join(roomData.roomname); 
    socket.score = 0; 
}): 

、ここに:

socket.on('sendPlayerScore', function(username){ 
    socket.score++; 
}); 

だから、その特定の部屋からすべての得点を得て、より多くの得点を決定します。

これを達成する良い方法はありますか?

ありがとうございます!

答えて

1

あなたはすべての部屋を見るとどのようなソケットIDはできるが、このようなコードでそれらにあります

let rooms = io.sockets.adapter.rooms; 
for (let room of Object.keys(rooms)) { 
    console.log("room"); 
    console.log(" ", rooms[room]); 
} 

io.sockets.adapter.rooms[room]は、このようなその部屋にいるすべてのソケットIDを持つオブジェクトが含まれています

{ 
    sockets: { 
     'm3wgTTKn-beT9TdyAAAB': true, 
     'mr-p1uL_jjeLzd0UAAAA': true 
    }, 
    length: 2 
} 

そして、socket.id与え、あなたから実際のソケットオブジェクトを取得できます。

io.sockets.connected[id] 

一緒にすべてを置く、あなたはこのような特定の部屋にすべてのソケットを列挙できます。

function getListOfSocketsInRoom(room) { 
    let sockets = []; 
    try { 
     let socketObj = io.sockets.adapter.rooms[room].sockets; 
     for (let id of Object.keys(socketObj)) { 
      sockets.push(io.sockets.connected[id]); 
     } 
    } catch(e) { 
     console.log(`Attempted to access non-existent room: ${room}`); 
    } 
    return sockets; 
} 

この時点で、あなたが収集するためにその配列を介して実行することができますので、あなたが部屋にソケットの配列を持っていますどんな情報(例えばスコア)を探していました。

+0

これは、受け入れられた回答として設定する必要があります、トリック、ありがとう:) – CatalinBerta

関連する問題