2012-02-10 4 views
0

まず、ここに私のコードです:JavaScript配列データのすべての

var users = {}; 

//User Connect 
io.sockets.on('connection', function (socket) { 
    socket.emit('connected'); 
    socket.on('session', function (session){ 

    users[socket.id] = [session, socket]; 
    console.log(users); 
    socket.emit("session_established"); 

    //User Disconnect 
    socket.on('disconnect', function(){ 
     delete users[socket.id]; 
     socket.broadcast.emit('disconnect', { data : session}); 
    }); 


    //The above all works as it should, now here it what I want to do: 

    socket.on('chatMessage', function (message, userID) { 
    users[userIDsSocket][userID].emit('chatMessageResponse', { data: message}); 
    }); 


    });  
}); 

はここで、私のデータは次のようになります(これは一人のユーザのためです):

{ '17819180631362480757': //this value is users[socket.id] 
[ '1',    //this value is session at the top, and in the bottom part userID 
{ id: '17819180631362480757', //The rest of this is the socket data 
    namespace: [Object], 
    manager: [Object], 
    disconnected: false, 
    ackPackets: 0, 
    acks: {}, 
    flags: [Object], 
    readable: true, 
    store: [Object], 
    _events: [Object] } ] } 

これは私がしなければならないものです(英語での機能の仕方):

ああ、最初に、ユーザーがウィンドウを開いている場合、複数のユーザーID /セッションが同じである可能性があります複数のタブ/コンピュータ/ devi CEは、ので、それは同じユーザーID

socket.on('chatMessage', function (message, userID) { 

for each (users[*].userID==userID) 
{ 
    users[*][userID].emit('chatMessageResponse', { data: message}); 
} 
}); 

を持っているすべてのソケットにそれを送信する必要があるので、私は置くところ私は(各パート無視socket.idて行くだろうかわからない[*]

答えて

1

変更

for (var key in users) 
{ 
if (users[key].userID==userID) 
{ 

users[key].socketID.emit('new_request_response', { data: message}); 
} 
} 
0

ifの条件でfor inループが必要になると思います。その後、

users[socket.id] = {userID:session, socketID:socket}; 

:へ

socket.on('chatMessage', function (message, userID) { 
    for (var key in users) 
     if (users[key].userId==userId) 
      users[key][userId].emit('chatMessageResponse', { data: message}); 
}); 
+0

私はそれを動作させることができません、私はこれを行い、接続されているすべての人にそれを送信することができますが、何も呼び出されていないので、userIDが記載されていません –

+0

、それはどのようにすべきなのか。 –

+0

素晴らしい。 'for 'を使うときに気にしておきたいことは、プロトタイプのメソッドのように、あなたが期待していないプロパティをループさせるかもしれないということです。したがって、ifのような別の条件を追加するのが最も安全かもしれません。 if(object.hasOwnProperty(key)) '幸運なコーディングと幸せなコーディング! – JKing

0

は、ここに私のコードです。

var io = require('socket.io').listen(15630); 
var clients = []; 
var coupling = []; 

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

clients[socket.id] = socket; 
socket.on('setUserID', function (userID) { 

    socket.set('userID', userID, function() { 
     coupling[userID] = socket.id; 
    }); 

}); 


for (var client in io.sockets.clients()) { 

     console.log(client); 

} 

socket.on('send', function (from,to,message) 
{ 

    var sender = 0; 
    socket.get('userID', function (err, name) { 
     sender = name; 
    }); 
    var userSocket = clients[coupling[to]]; 
    if(userSocket != null || userSocket != undefined) 
    userSocket.emit('message', {from :from,to : to,message:message}); 
}); 
socket.on('disconnect', function() { 

    var sender = 0; 
    socket.get('userID', function (err, name) { 
     sender = name; 
    }); 
    delete clients[coupling[sender]] 
    //var userSocket = clients[coupling[sender]]; 
    //if(userSocket != null || userSocket != undefined) 
    //clients[coupling[sender]] = null; 
}); 

});

関連する問題