diff --git a/Sources/Console/Program.cs b/Sources/Console/Program.cs index 692fbed..633e206 100644 --- a/Sources/Console/Program.cs +++ b/Sources/Console/Program.cs @@ -10,7 +10,10 @@ using System.Reflection.PortableExecutable; // Déclaration des Managers (et de leur méthode de sauvegarde) UserManager userMngr = new UserManager(new LoaderXml()); -//MonsterManager ub = new MonsterManager(new LoaderStub()); +MonsterManager monsterBase = new MonsterManager(new LoaderXml()); + +// Variables statiques +bool isUserConnected = false; //======================================= Fonctions d'affichage ============================================// @@ -47,6 +50,10 @@ void menuAccueil(){ Console.ResetColor(); int choix; + userMngr.loadUsers(); + displayAllUsers(); + Thread.Sleep(2000); + do { choix = ConsoleHelper.MultipleChoice("Menu principal", true, @@ -56,7 +63,10 @@ void menuAccueil(){ switch (choix) { case -1: - // Lorsque l'utilisateur appuie sur Echap, alors quitter l'application. + // Lorsque l'utilisateur appuie sur Echap, alors sauvegarder et quitter l'application. + userMngr.saveUsers(userMngr.ListUsers); + displayAllUsers(); + Thread.Sleep(2000); exitAppConsole(); break; case 0: @@ -89,10 +99,12 @@ void menuAccueil(){ case 4: userMngr.loadUsers(); + displayAllUsers(); return; case 5: userMngr.saveUsers(userMngr.ListUsers); + displayAllUsers(); return; default: @@ -154,6 +166,7 @@ int menuConnexion() } else { + isUserConnected = true; Console.WriteLine(); Console.ForegroundColor = ConsoleColor.Green; Console.WriteLine("\tConnexion réussie !"); @@ -244,14 +257,23 @@ void menuMontres() int choix; do { - choix = ConsoleHelper.MultipleChoice("Index des monstres", true, - "Afficher la liste des montres", "Afficher les informations d'un monstre", "Recherche", "Filtrer", "Retour à l'accueil"); + if (isUserConnected) + { + choix = ConsoleHelper.MultipleChoice("Index des monstres", true, + "Afficher la liste des monstres", "Afficher les informations d'un monstre", "Recherche", "Filtrer", "Retour à l'accueil", "Ecrire un conseil"); + } + else + { + choix = ConsoleHelper.MultipleChoice("Index des monstres", true, + "Afficher la liste des monstres", "Afficher les informations d'un monstre", "Recherche", "Filtrer", "Retour à l'accueil"); + } switch (choix) { case -1: // Lorsque l'utilisateur appuie sur Echap, retourner à l'accueil. Console.Clear(); + isUserConnected = false; break; case 0: Console.Clear(); @@ -260,7 +282,9 @@ void menuMontres() case 1: Console.Clear(); - //================= A FAIRE =================// + string texte = rechercheMonstre(); + List m; + afficherUnMonstre(monsterBase.search(texte.ToString())); break; case 2: @@ -273,22 +297,28 @@ void menuMontres() break; case 4: + Console.Clear(); + //================= A FAIRE =================// return; default: // Pour toutes les autres possiblités non comprise entre -1 et 3 // (normalement pas possible, mais on est jamais trop prudent) Console.Clear(); + isUserConnected = false; writeLineError($"La valeur {choix} n'est pas valide."); return; } } while (choix != -1); // Tant que l'utilisateur n'appuie pas sur Echap } +void afficherUnMonstre(List m) +{ + +} //======================================= Fonctions d'affichage ============================================// void displayAllMonsters() { - /* ConsoleHelper.displayTitle("Index des monstres - Affichage des monstres", true); displayAllMonstersLegend(); Console.WriteLine(); @@ -313,9 +343,20 @@ void displayAllMonsters() Console.ResetColor(); continue; } - }*/ + } + Console.ReadKey(); } +void displayAllUsers() +{ + Console.WriteLine(); + foreach (User u in userMngr.ListUsers) + { + Console.WriteLine($"{u.Pseudo} --> {u.Prenom} {u.Nom}"); + } +} + + void displayAllMonstersLegend() { Console.Write("Les monstres sont soit "); @@ -333,8 +374,8 @@ void displayAllMonstersLegend() } // Fonction de recherche de monstre, mise à jour de la liste à chaque touche appuyée -void rechercheMonstre() -{/* +string rechercheMonstre() +{ List m; Console.Clear(); ConsoleKeyInfo carac; @@ -360,7 +401,7 @@ void rechercheMonstre() Console.Write(listCarac); Console.WriteLine(); Console.WriteLine(); - m = monsterBase.search(listCarac.ToString(), monsterBase); + m = monsterBase.search(listCarac.ToString()); foreach (Monstre mnstr in m) { Console.WriteLine($"\t- {mnstr.Name}"); @@ -368,7 +409,8 @@ void rechercheMonstre() carac = Console.ReadKey(true); } writeLineError("Retour à la page précédente..."); - Thread.Sleep(1000);*/ + Thread.Sleep(1000); + return listCarac; } @@ -382,4 +424,5 @@ Monstre monstre = new Monstre(1, "Dragon", "Dangereux", "Un redoutable dragon cr Conseil conseil = new Conseil(auteur, "Soyez prudent lors de votre rencontre avec le dragon.", monstre); // Affichage du conseil -conseil.affichConseil(); \ No newline at end of file +conseil.affichConseil(); +menuAccueil(); \ No newline at end of file diff --git a/Sources/Persistance/LoaderXML.cs b/Sources/Persistance/LoaderXML.cs index 18f95b9..8307f90 100644 --- a/Sources/Persistance/LoaderXML.cs +++ b/Sources/Persistance/LoaderXML.cs @@ -13,34 +13,33 @@ using System.Runtime.CompilerServices; namespace Persistance { - // Pas possible au final de factoriser la code je pense pcq les proto son différent à chaque fois et on peut pas changer le prototype dans un appel public class LoaderXml : IUserDataManager, IMonsterDataManager { static string path = "../../../../Persistance/saves/"; static string fichierUserXML = "users.xml"; static string fichierMonstreXML = "monsters.xml"; - public static void sauvegarderListUsers() - { - throw new NotImplementedException(); - } - List IMonsterDataManager.loadMonsters() + + // Serialisation / Deserialisation de Monstres + public List loadMonsters() { var serialiserXML = new DataContractSerializer(typeof(List)); List? monsters; - using (Stream s = File.OpenRead(fichierMonstreXML)) + + try { - monsters = serialiserXML.ReadObject(s) as List; + using (Stream s = File.OpenRead(fichierMonstreXML)) + { + monsters = serialiserXML.ReadObject(s) as List; + } + } + catch (FileNotFoundException e) { + throw new FileNotFoundException("The XML file used to load a list of monsters is missing.", e); } - return monsters; + if (monsters != null) return monsters; // ça va faire un code smells + return new List { }; } - /// - /// Enregistre les données dans un fichier XML - /// CORECTION: à adapter en fonction de IUserDataManager mais sinon fonctionnelle - /// - - void IMonsterDataManager.saveMonsters(List monstres) { Directory.SetCurrentDirectory(Path.Combine(Directory.GetCurrentDirectory(), path)); // Setup le chemin d'accès @@ -55,9 +54,26 @@ namespace Persistance } } + + // Serialisation / Deserialisation de Users + public List loadUsers() + { + var serialiserXML = new DataContractSerializer(typeof(List)); + List? users; + using (Stream s = File.OpenRead(path + fichierUserXML)) + { + users = serialiserXML.ReadObject(s) as List; + } + if (users == null) + { + return null; // Surement que ça va faire un code smells, mais j'ai pas trop cherché pour le moment + } + return users; + } + void IUserDataManager.saveUsers(List users)// Serialise correctement juste voir comment l'appelé en fonction de IUserDataManager { - Directory.SetCurrentDirectory(Path.Combine(Directory.GetCurrentDirectory(), path)); // Setup le chemin d'accès + Directory.SetCurrentDirectory(Path.Combine(Directory.GetCurrentDirectory(), path)); var serialiserXML = new DataContractSerializer(typeof(List)); XmlWriterSettings xmlSettings = new XmlWriterSettings() { Indent = true }; // Pour avoir le format xml dans le fichier ( indentation etc... ) @@ -70,22 +86,7 @@ namespace Persistance } } - public List loadUsers() - { - var serialiserXML = new DataContractSerializer(typeof(List)); - List? users; - using (Stream s = File.OpenRead(path + fichierUserXML)) - { - users = serialiserXML.ReadObject(s) as List; - } - - Console.WriteLine(); - foreach (User u in users) - { - Console.WriteLine($"{u.Pseudo} --> {u.Prenom} {u.Nom}"); - } - return users; - } + } } \ No newline at end of file diff --git a/Sources/Persistance/MonsterManager.cs b/Sources/Persistance/MonsterManager.cs index 1c9df68..39693ac 100644 --- a/Sources/Persistance/MonsterManager.cs +++ b/Sources/Persistance/MonsterManager.cs @@ -25,12 +25,12 @@ namespace Persistance } void IMonsterDataManager.saveMonsters(List monstres) { - throw new NotImplementedException(); + Pers.saveMonsters(monstres); } List IMonsterDataManager.loadMonsters() { - throw new NotImplementedException(); + return Pers.loadMonsters(); } public List search(string texte) @@ -40,7 +40,6 @@ namespace Persistance select m).ToList(); // LINQ } - public MonsterManager(IMonsterDataManager dataMngr) { Pers = dataMngr; ListMonsters = new LoaderStub().loadMonsters(); diff --git a/Sources/Persistance/saves/users.xml b/Sources/Persistance/saves/users.xml index a9575d3..1fc53f7 100644 --- a/Sources/Persistance/saves/users.xml +++ b/Sources/Persistance/saves/users.xml @@ -63,4 +63,11 @@ TestPseudo TestMdp + + + FJDKSLFJKLDS + NKLFF + FJDSKLFJKLSDF + A + \ No newline at end of file