Question

Je suis en train de passer des objets d'un client à un autre client, par exemple pièces dans un jeu de plateau multi-joueurs. J'ai une solution de travail en utilisant JSON.parser et __proto__, mais je suis curieux de savoir s'il y a une meilleure façon.

Le client envoie:

var my_piece = new BoardPiece();
// ... my_piece is assigned data, like x-y coordinates
socket.send(JSON.stringify(my_piece));

Serveur avant la pièce à d'autres:

client.broadcast(piece);

Un autre client reçoit:

var your_piece = JSON.parse(json);
your_piece.__proto__ = BoardPiece.prototype; // provide access to BoardPiece's functions

Il est la dernière étape où j'utilise __proto__ que je suis concerné, je peux être moi-même tirer dans le pied. Y at-il une suggestion mieux?

Était-ce utile?

La solution

// clientone.js

var piece = new BoardPiece();
// ...
socket.send(JSON.stringify(piece));

// clienttwo.js
var piece = BoardPiece.Create(JSON.parse(json));
...

// BoardPiece.js
function BoardPiece() {

}

BoardPiece.prototype.toJSON = function() {
    var data = {};
    data.foo = this.foo;
    ...
    return data;
};

BoardPiece.Create = function(data) {
    var piece = new BoardPiece();
    piece.foo = data.foo;
    ...
    return piece;
}

Tout d'abord en utilisant la méthode de toJSON sur vos objets permet JSON.stringify de convertir votre objet à immediat JSON. Cela fait partie de l'API JSON. L'API JSON appellera la méthode toJSON si elle existe et convertit cet objet à JSON.

Cela vous permet essentiellement de sérialiser votre objet au fur et à la façon dont vous voulez.

La deuxième partie est l'ajout d'une méthode de fabrication en tant que propriété de votre constructeur qui prend vos données JSON sérialisé et crée une nouvelle boardpiece. Il vous injectera ensuite vos données sérialisé dans cet objet boardpiece.

Ainsi, votre sérialisation que les données que vous aimez et passer ensuite ces données par une méthode de fabrication. Ceci est la meilleure façon d'envoyer des objets personnalisés d'un client à l'autre.

Autres conseils

Il y a un tas de projets de synchronisation d'objet pour le noeud qui pourrait rendre la vie plus facile. Pour commencer, consultez:

Vous TOU essayé la méthode de jQuery $ .extend ()? http://api.jquery.com/jQuery.extend/

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top