$
#
@
<
>
+
$

NOUS LES DEVS

Utilitaire

A la conquête du jeu vidéo partie 14

Niveau : intermédiaire
</> </> </>

Une affaire d'état

Dès que je modifie un fichier, mon serveur se relance, et je dois rafraîchir les navigateurs, recréer une partie, rejoindre et revalider, pour revenir à l’état auquel j’étais, juste avant le redémarrage, et c’est super chiant ! J’ai donc décidé de développer un petit utilitaire qui va me permettre de sauvegarder cet état.

Debug

Je crée un fichier de debug et un nouveau JS qui reprend le mécanisme de connexion du client.js ainsi que trois méthodes pour la récupération, la sauvegarde et la restauration de parties.

//recup des parties
get_parties(){
	this.send_to_server( "message", { action : "debug_get_parties" });
}

//sauvegarde des parties
save_parties(){
	this.send_to_server( "message", { action : "debug_save_parties" });
}

//restoration des parties
restore_parties(){
	this.send_to_server( "message", { action : "debug_restore_parties" });
}

BDD

Et pour pouvoir faire une sauvegarde, je vais devoir stocker les parties dans une base de données, donc je crée une nouvelle collection dans mongoDB via le shell.

db.parties.insert({"json_data":""});

Au niveau de mon serveur, je crée les deux méthodes dont je vais avoir besoin pour la récupération et la sauvegarde et j’ajoute aussi une méthode pour vider les sauvegardes.

save_parties(){
	return this.mongodb.collection('parties').insert({"json_data" : this.parties});
}
restore_parties(){
	return this.mongodb.collection('parties').find({},{"_id":0,"json_data":1}).toArray();
}
delete_partie(){
	return this.mongodb.collection('parties').remove({});
}

Sauvegarde

Et là je vais faire la sauvegarde comme un sauvage, je vais carrément mettre tout l’objet parties tel quel dans la collection parties et à chaque fois je vais prendre soins de vider la collection car pour le moment, je n’ai besoin que d’une seule sauvegarde.

debug_save_parties(user_socket, params){
	if(this.parties != undefined){	
		this.delete_partie().then( (response) => {
			this.save_parties().then( (response) => {
				e("Parties sauvegardé");
			});
		});
	}
}

Restauration

Et pour la restauration, je fais l’inverse, je remets toute les données de la collection dans la variable parties.

debug_restore_parties(user_socket, params){
	this.restore_parties().then( (response) => {
		this.parties = response[0].json_data;
	});
}

Redémarrage

Maintenant, lorsque mon serveur redémarre je peux restaurer ma partie. J’ai créé aussi une méthode qui retourne les parties courantes du serveur, du coup je peux les afficher dans ma page simplement en cliquant sur un bouton !

02/09/2016

Yann Vangampelaere - nouslesdevs -

NOUS LES DEVS

Vous aimez ce que je fais ? Vous voulez que j'en fasse plus ? dans le développement du blog.