2012-05-09 3 views
0

J'ai du mal à comprendre la raison de l'erreur que je reçois lorsque l'utilisateur tente d'écrire quoi que ce soit sur le serveur:écriture à des prises

TypeError: Object #<identifyClient> has no method 'write' 
at writeToAll (/root/node/mud/server.js:13:15) 

Pourquoi plaintes identifyClient() au sujet de l'écriture(), alors qu'il se produit dans writeToAll() (la ligne 15 a un commentaire à côté)? identifyClient() ne définit réellement que le nom du client, et ne devrait pas être concerné par ce qui se passe dans writeToAll().

var net = require("net"); 

var clients = []; 

function identifyClient(client) { 
    this.name = null; 
    this.client = client; 
} 

function writeToAll(data, client) { 
    for (var i = 0; i < clients.length; i++) { 
     if (clients[i] != client) { 
      clients[i].write(data); // This is line 15 
     } 
    } 
} 

var server = net.createServer(function(client) { 
    var clientID = new identifyClient(client); 
    clients.push(clientID); 

    client.on("data", function(data) { 
     writeToAll(data, client); 
    }); 
}); 

server.listen(4444); 

Répondre

2

Remplacer clients[i] avec clients[i].client

aussi vous devez supprimer le client du tableau clients une fois qu'il se déconnecte.

+0

Merci. Ça a marché comme sur des roulettes. J'allais mettre en œuvre la suppression de l'utilisateur de la matrice, mais je voulais d'abord résoudre ce problème avant de poursuivre le développement. – Eleeist