From 1f470f7130ae6a74d5e74c68de8db46065aa7228 Mon Sep 17 00:00:00 2001 From: Nicolas BLONDEAU Date: Tue, 16 May 2023 14:29:02 +0200 Subject: [PATCH] :tada: Persistance XML fonctionnelle ! Ajout temporaire de fonctions de tests de la persistance --- Sources/Console/Program.cs | 10 ++- Sources/Modèle/User.cs | 8 +++ Sources/Persistance/IMonsterDataManager.cs | 4 +- Sources/Persistance/LoaderXML.cs | 80 ++-------------------- Sources/Persistance/UserManager.cs | 16 +++-- Sources/Persistance/saves/users.xml | 38 ++++++++++ 6 files changed, 74 insertions(+), 82 deletions(-) create mode 100644 Sources/Persistance/saves/users.xml diff --git a/Sources/Console/Program.cs b/Sources/Console/Program.cs index 521f937..e3bd29b 100644 --- a/Sources/Console/Program.cs +++ b/Sources/Console/Program.cs @@ -49,7 +49,7 @@ void menuAccueil(){ do { choix = ConsoleHelper.MultipleChoice("Menu principal", true, - "Connexion", "Inscription", "Continuer en tant qu'invité", "Quitter l'application", "[TEST] - LoadUsers", "[TEST] - LoadUsers"); + "Connexion", "Inscription", "Continuer en tant qu'invité", "Quitter l'application", "[TEST] - LoadUsers", "[TEST] - SaveUsers"); //Traitement du choix de l'utilisateur switch (choix) @@ -86,6 +86,14 @@ void menuAccueil(){ exitAppConsole(); return; + case 4: + userMngr.loadUsers(); + return; + + case 5: + userMngr.saveUsers(userMngr.ListUsers); + return; + default: // Pour toutes les autres possiblités non comprise entre -1 et 3 // (normalement pas possible, mais on est jamais trop prudent) diff --git a/Sources/Modèle/User.cs b/Sources/Modèle/User.cs index e3d0ae1..85977e6 100644 --- a/Sources/Modèle/User.cs +++ b/Sources/Modèle/User.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Runtime.Serialization; using System.Text; using System.Threading.Tasks; using System.Xml.Linq; @@ -13,12 +14,19 @@ namespace Model /// son nom et prénom en privé, pour une utilisation ultérieure et/ou pour identifier de manière /// plus simple l'utilisateur dans la base de donnée (car un pseudo n'est pas forcément explicite) /// + + [DataContract] public class User { + [DataMember] public string Pseudo { get; private set; } + [DataMember] public string Nom { get; private set; } + [DataMember] public string Prenom { get; private set; } + [DataMember] private string Mdp { get; set; } + [DataMember] public List? monstresDejaVu { get; private set; } public User(string pseudo, string nom, string prenom, string mdp, List? monstresVus = null) diff --git a/Sources/Persistance/IMonsterDataManager.cs b/Sources/Persistance/IMonsterDataManager.cs index 67c0efa..714da21 100644 --- a/Sources/Persistance/IMonsterDataManager.cs +++ b/Sources/Persistance/IMonsterDataManager.cs @@ -9,7 +9,7 @@ namespace Persistance { public interface IMonsterDataManager { - void saveMonsters(List monstres); - List loadMonsters(); + public void saveMonsters(List monstres); + public List loadMonsters(); } } \ No newline at end of file diff --git a/Sources/Persistance/LoaderXML.cs b/Sources/Persistance/LoaderXML.cs index 34c7a66..013ede2 100644 --- a/Sources/Persistance/LoaderXML.cs +++ b/Sources/Persistance/LoaderXML.cs @@ -15,56 +15,9 @@ namespace Persistance public class LoaderXML : IUserDataManager, IMonsterDataManager { + static string path = "../../../../Persistance/saves/"; static string fichierXML = "users.xml"; static string monstreXML = "monsters.xml"; - /* - #region SauvegardeUser - public static void sauvegardeUserXML(List) //Fonction de sauvegarde fonctionnelle si on enlève loadUsers car conflit en les deux - { - User test = new User("DedeDu42", "dede", "dodo", "mdp", new List { }); - - - Directory.SetCurrentDirectory(Path.Combine(Directory.GetCurrentDirectory(), "../../../../Persistance/saves/")); // Setup le chemin d'accès - - var serialiserXML = new DataContractSerializer(typeof(User)); - - #region Serialisation - - XmlWriterSettings xmlSettings = new XmlWriterSettings() { Indent = true }; // Pour avoir le format xml dans le fichier ( indentation etc... ) - - using (TextWriter tw = File.CreateText(fichierXML)) - { - using (XmlWriter writer = XmlWriter.Create(tw, xmlSettings)) - { - serialiserXML.WriteObject(writer, test); - } - } - - #endregion - - - #region Deserialisation - - User user2; - using (Stream s = File.OpenRead(fichierXML)) - { - user2 = serialiserXML.ReadObject(s) as User; - } - - #endregion - - #region AffichageTest - - Console.WriteLine(user2.Prenom); - Console.WriteLine(user2.Nom); - Console.WriteLine(user2.Pseudo); - Console.WriteLine(user2.monstresDejaVu); - - - #endregion - #endregion - } - */ public static void sauvegarderListUsers() @@ -92,14 +45,8 @@ namespace Persistance void IMonsterDataManager.saveMonsters(List monstres) { - #region Serialisation - - - Directory.SetCurrentDirectory(Path.Combine(Directory.GetCurrentDirectory(), "../../../../Persistance/saves/")); // Setup le chemin d'accès + Directory.SetCurrentDirectory(Path.Combine(Directory.GetCurrentDirectory(), path)); // Setup le chemin d'accès var serialiserXML = new DataContractSerializer(typeof(List)); - - #region Serialisation - XmlWriterSettings xmlSettings = new XmlWriterSettings() { Indent = true }; // Pour avoir le format xml dans le fichier ( indentation etc... ) using (TextWriter tw = File.CreateText(monstreXML)) { @@ -108,16 +55,13 @@ namespace Persistance serialiserXML.WriteObject(writer, monstres); } } - #endregion } void IUserDataManager.saveUsers(List users)// Serialise correctement juste voir comment l'appelé en fonction de IUserDataManager { - Directory.SetCurrentDirectory(Path.Combine(Directory.GetCurrentDirectory(), "../../../../Persistance/saves/")); // Setup le chemin d'accès + Directory.SetCurrentDirectory(Path.Combine(Directory.GetCurrentDirectory(), path)); // Setup le chemin d'accès var serialiserXML = new DataContractSerializer(typeof(List)); - #region Serialisation - XmlWriterSettings xmlSettings = new XmlWriterSettings() { Indent = true }; // Pour avoir le format xml dans le fichier ( indentation etc... ) using (TextWriter tw = File.CreateText(fichierXML)) { @@ -126,33 +70,23 @@ namespace Persistance serialiserXML.WriteObject(writer, users); } } - - #endregion - //throw new NotImplementedException(); } public List loadUsers() { - #region Deserialisation var serialiserXML = new DataContractSerializer(typeof(List)); List users; - using (Stream s = File.OpenRead(fichierXML)) + using (Stream s = File.OpenRead(path + fichierXML)) { users = serialiserXML.ReadObject(s) as List; } - #endregion - #region AffichageTest - + Console.WriteLine(); foreach (User u in users) { - Console.WriteLine(u.Pseudo); - Console.WriteLine(u.Prenom); + Console.WriteLine($"{u.Pseudo} --> {u.Prenom} {u.Nom}"); } return users; - #endregion } } -} - -#endregion \ No newline at end of file +} \ No newline at end of file diff --git a/Sources/Persistance/UserManager.cs b/Sources/Persistance/UserManager.cs index 2637027..f8928b9 100644 --- a/Sources/Persistance/UserManager.cs +++ b/Sources/Persistance/UserManager.cs @@ -32,16 +32,18 @@ namespace Persistance { } - //CHANGER VISIBILITE CAR ATTENTION - void IUserDataManager.saveUsers(List users) + + public List loadUsers() { - Pers.saveUsers(users); + return Pers.loadUsers(); } - List IUserDataManager.loadUsers() + public void saveUsers(List users) { - return Pers.loadUsers(); + Pers.saveUsers(users); } + //CHANGER VISIBILITE CAR ATTENTION + //Pers.saveUsers(users); /// /// Cette méthode vérifie si l'utilisateur est présent dans la base de données @@ -88,9 +90,11 @@ namespace Persistance return true; } + + public UserManager(IUserDataManager dataMngr) { Pers = dataMngr; - ListUsers = new LoaderStub().loadUsers(); + ListUsers = new LoaderXML().loadUsers(); //CHOIX ICI DE LA METHODE DE CHARGEMENT INITIAL DES UTILISATEURS } } } diff --git a/Sources/Persistance/saves/users.xml b/Sources/Persistance/saves/users.xml new file mode 100644 index 0000000..8536d7a --- /dev/null +++ b/Sources/Persistance/saves/users.xml @@ -0,0 +1,38 @@ + + + + mdp + dede + dodo + DedeDu42 + + + + feur + Monchanin + Liam + Moi + + + + niblondeau + Blondeau + Nicolas + Nikoala + + + + mdp + Doumir + Yannis + Yadoumir + + + + oSu!727 + Bonetti + Martin + osuplayer123 + + + \ No newline at end of file