0

私が理解できることから、ソケットを作成したら、それを格納するための配列を作成できます

userArray[socket.nickname]=socket;

次に、次のようにメッセージを送信できます。

  io.sockets.socket(userArray[data.to]).emit('private message', tstamp(), socket.nickname, message);

基本的なロジックは、各ソケットのコピーをニックネームで識別されるオブジェクトに格納することです。そのソケットにメッセージを送信する場合は、ソケットのコピーを使用し、io.sockets.socket(id).emit() を介してメッセージを送信します。サーバーコード全体は次のとおりです。

io.sockets.on('connection', function (socket) {
  socket.on('user message', function (msg) {
    socket.broadcast.emit('user message', tstamp(), socket.nickname, msg);
    updateLog('user message', socket.nickname, msg);
  });

   socket.on('private message', function(data) {
        socket.get(data.nickname, function (err, name) {    
        console.log('Chat message by ', name);
        });
        updateLog('private message', socket.nickname, data.message);
        message=data.message;
        io.sockets.socket(userArray[data.to]).emit('private message', tstamp(), socket.nickname, message);
   });

  socket.on('get log', function () {
    updateLog(); // Ensure old entries are cleared out before sending it.
    io.sockets.emit('chat log', log);
  });

  socket.on('nickname', function (nick, fn) {
    var i = 1;
    var orignick = nick;
    while (nicknames[nick]) {
      nick = orignick+i;
      i++;
    }
    fn(nick);

    nicknames[nick] = socket.nickname = nick;
    userArray[socket.nickname]=socket;

    socket.set('nickname', nick, function () { socket.emit('ready'); });

    socket.broadcast.emit('announcement', nick + ' connected');
//    io.sockets.socket(userArray[nick]).emit('newID', 'Your name is: ' + nick, '. Your ID is: '+ userArray[nick]);
    io.sockets.emit('nicknames', nicknames);
  });   
4

1 に答える 1

1

実際の質問が何であるかは不明ですが、ソケットオブジェクトをオブジェクトキーの値として保存した場合(これはあなたがしていることです。userArray配列ではないため、誤解を招く名前です)、メソッドを呼び出すだけです値について。IOW、代わりに

io.sockets.socket(userArray[data.to]).emit(...

あなたはただ書くでしょう:

userArray[data.to].emit(...
于 2012-07-11T03:10:48.020 に答える