diff --git a/Sources/ConsoleApp1/ConsoleApp1.csproj b/Sources/ConsoleApp1/ConsoleApp1.csproj new file mode 100644 index 0000000..180e42c --- /dev/null +++ b/Sources/ConsoleApp1/ConsoleApp1.csproj @@ -0,0 +1,14 @@ + + + + Exe + net8.0 + enable + enable + + + + + + + diff --git a/Sources/ConsoleApp1/Program.cs b/Sources/ConsoleApp1/Program.cs new file mode 100644 index 0000000..5f72681 --- /dev/null +++ b/Sources/ConsoleApp1/Program.cs @@ -0,0 +1,9 @@ +using CoreLibrary.Persistance; +using CoreLibrary.Joueurs; + +PersistanceJSON p = new(); + +List mesJoueurs = new List([ + new Joueur("Céleste"), + new Joueur("Pauline") +]); diff --git a/Sources/CoreLibrary/CoreLibrary.csproj b/Sources/CoreLibrary/CoreLibrary.csproj index fa71b7a..af4eedb 100644 --- a/Sources/CoreLibrary/CoreLibrary.csproj +++ b/Sources/CoreLibrary/CoreLibrary.csproj @@ -6,4 +6,8 @@ enable + + + + diff --git a/Sources/CoreLibrary/Partie.cs b/Sources/CoreLibrary/Partie.cs index 53646ba..901d154 100644 --- a/Sources/CoreLibrary/Partie.cs +++ b/Sources/CoreLibrary/Partie.cs @@ -115,8 +115,6 @@ namespace CoreLibrary { Regles = regles; Persistance = persistance; - - ChargerPartie(); } /// @@ -181,7 +179,6 @@ namespace CoreLibrary if (++courant == joueurs.Count) courant = 0; QuandPasserMain(); - SauvegarderPartie(); if (courant == 0 && (plateauCourant.Tour > Regles.TourMaximum || plateaux.Where(plateau => plateau.Victoire).Any())) { @@ -213,28 +210,5 @@ namespace CoreLibrary QuandPartieTerminee(gagnants, perdants); } - - /// - /// Sauvegarder la partie - /// - private void SauvegarderPartie() - { - Persistance.EnregistrerParties(new List { this }); - } - - /// - /// Charger la partie - /// - private void ChargerPartie() - { - var parties = Persistance.ChargerParties(); - if (parties.Any()) - { - var partie = parties.First(); - joueurs.AddRange(partie.joueurs); - plateaux.AddRange(partie.plateaux); - courant = partie.courant; - } - } } } diff --git a/Sources/CoreLibrary/Persistance/IPersistance.cs b/Sources/CoreLibrary/Persistance/IPersistance.cs index 1d57c77..94e8ab6 100644 --- a/Sources/CoreLibrary/Persistance/IPersistance.cs +++ b/Sources/CoreLibrary/Persistance/IPersistance.cs @@ -1,17 +1,11 @@ -using CoreLibrary.Joueurs; + using CoreLibrary.Joueurs; namespace CoreLibrary.Persistance { public interface IPersistance { - public bool EstEnregistre { get; } + public T[] Charger(); - public List ChargerJoueurs(); - - public List ChargerParties(); - - public void EnregistrerJoueurs(List joueurs); - - public void EnregistrerParties(List parties); + public void Enregistrer(T[] elements); } } diff --git a/Sources/CoreLibrary/Persistance/Manager.cs b/Sources/CoreLibrary/Persistance/Manager.cs deleted file mode 100644 index 93771fc..0000000 --- a/Sources/CoreLibrary/Persistance/Manager.cs +++ /dev/null @@ -1,50 +0,0 @@ -using CoreLibrary.Joueurs; -using CoreLibrary.Persistance; -using System.Runtime.InteropServices; - -namespace CoreLibrary.Manager -{ - public class Manager : IDisposable - { - private bool estDetruit; - - private readonly IPersistance persistance; - - private readonly List joueurs; - public IReadOnlyCollection Joueurs => joueurs.AsReadOnly(); - - private readonly List parties; - public IReadOnlyCollection Parties => parties.AsReadOnly(); - - public Manager(IPersistance persistance) - { - this.persistance = persistance ?? throw new ArgumentNullException(nameof(persistance)); - joueurs = this.persistance.ChargerJoueurs() ?? new List(); - parties = this.persistance.ChargerParties() ?? new List(); - } - - public void Dispose() - { - Dispose(true); - GC.SuppressFinalize(this); - } - - protected virtual void Dispose(bool detruire) - { - if (estDetruit) return; - - if (detruire) - { - persistance.EnregistrerJoueurs(joueurs); - persistance.EnregistrerParties(parties); - } - - estDetruit = true; - } - - ~Manager() - { - Dispose(false); - } - } -} diff --git a/Sources/CoreLibrary/Persistance/Persistance.cs b/Sources/CoreLibrary/Persistance/Persistance.cs deleted file mode 100644 index 5117ac0..0000000 --- a/Sources/CoreLibrary/Persistance/Persistance.cs +++ /dev/null @@ -1,91 +0,0 @@ -using CoreLibrary.Joueurs; -using System.Runtime.Serialization.Json; -using System.Text; -using System.Text.Json; - -namespace CoreLibrary.Persistance -{ - public class Persistance : IPersistance - { - private readonly string joueursFilePath = "joueurs.json"; - private readonly string partiesFilePath = "parties.json"; - private readonly string ancienRepertoire = Directory.GetCurrentDirectory(); - public bool EstEnregistre { get; private set; } - - public List ChargerJoueurs() - { - if (!File.Exists(joueursFilePath)) - { - return new List(); - } - - DataContractJsonSerializer jsonSerializer = new DataContractJsonSerializer(typeof(List)); - List joueurs; - - using (FileStream s = File.OpenRead(joueursFilePath)) - { - joueurs = jsonSerializer.ReadObject(s) as List; - } - - return joueurs; - } - - public List ChargerParties() - { - if (!File.Exists(partiesFilePath)) - { - return new List(); - } - - DataContractJsonSerializer jsonSerializer = new DataContractJsonSerializer(typeof(List)); - List parties; - - using (FileStream s = File.OpenRead(partiesFilePath)) - { - parties = jsonSerializer.ReadObject(s) as List; - } - - return parties; - } - - public void EnregistrerJoueurs(List joueurs) - { - DataContractJsonSerializer jsonSerializer = new DataContractJsonSerializer(typeof(List)); - - using (FileStream s = File.Create(Path.Combine(joueursFilePath, "../.."))) - { - using (var writer = JsonReaderWriterFactory.CreateJsonWriter( - s, - Encoding.UTF8, - false, - true)) - { - jsonSerializer.WriteObject(writer, joueurs); - } - } - - EstEnregistre = true; - Directory.SetCurrentDirectory(ancienRepertoire); - } - - public void EnregistrerParties(List parties) - { - DataContractJsonSerializer jsonSerializer = new DataContractJsonSerializer(typeof(List)); - - using (FileStream s = File.Create(Path.Combine(partiesFilePath, "../.."))) - { - using (var writer = JsonReaderWriterFactory.CreateJsonWriter( - s, - Encoding.UTF8, - false, - true)) - { - jsonSerializer.WriteObject(writer, parties); - } - } - - EstEnregistre = true; - Directory.SetCurrentDirectory(ancienRepertoire); - } - } -} \ No newline at end of file diff --git a/Sources/CoreLibrary/Persistance/PersistanceJSON.cs b/Sources/CoreLibrary/Persistance/PersistanceJSON.cs new file mode 100644 index 0000000..9f03a23 --- /dev/null +++ b/Sources/CoreLibrary/Persistance/PersistanceJSON.cs @@ -0,0 +1,69 @@ +using CoreLibrary.Joueurs; +using System.Runtime.Serialization.Json; +using System.Text; +using System.Xml; + +namespace CoreLibrary.Persistance +{ + public class PersistanceJSON : IPersistance + { + + public T[] Charger() + { + string fichier = $"{nameof(T)}.json"; + string ancienDossier = Directory.GetCurrentDirectory(); + + Directory.SetCurrentDirectory(Path.Combine(ancienDossier, "../../../../")); + + if(!Directory.Exists("Fichiers") || !File.Exists(fichier)) + { + Directory.SetCurrentDirectory(ancienDossier); + return []; + } + + Directory.SetCurrentDirectory(Path.Combine(Directory.GetCurrentDirectory(), "Fichiers")); + + DataContractJsonSerializer jsonSerializer = new DataContractJsonSerializer(typeof(IEnumerable)); + T[] elements; + + using (FileStream s = File.OpenRead(fichier)) + { + elements = jsonSerializer.ReadObject(s) as T[]; + } + + Directory.SetCurrentDirectory(ancienDossier); + return elements; + } + + public void Enregistrer(T[] elements) + { + string fichier = $"{nameof(T)}.json"; + string ancienDossier = Directory.GetCurrentDirectory(); + + Directory.SetCurrentDirectory(Path.Combine(ancienDossier, "../../../../")); + + if (!Directory.Exists("Fichiers")) + { + Directory.CreateDirectory("Fichiers"); + } + + Directory.SetCurrentDirectory(Path.Combine(Directory.GetCurrentDirectory(), "Fichiers")); + + DataContractJsonSerializer jsonSerializer = new DataContractJsonSerializer(typeof(List)); + + using(FileStream s = File.Create(fichier)) + { + using(XmlDictionaryWriter writer = JsonReaderWriterFactory.CreateJsonWriter( + s, + Encoding.UTF8, + false, + true)) + { + jsonSerializer.WriteObject(writer, elements); + } + } + + Directory.SetCurrentDirectory(ancienDossier); + } + } +} \ No newline at end of file diff --git a/Sources/Fichiers/T.json b/Sources/Fichiers/T.json new file mode 100644 index 0000000..e69de29 diff --git a/Sources/MauiSpark/MauiProgram.cs b/Sources/MauiSpark/MauiProgram.cs index 595afed..a44a012 100644 --- a/Sources/MauiSpark/MauiProgram.cs +++ b/Sources/MauiSpark/MauiProgram.cs @@ -1,13 +1,9 @@ -using CoreLibrary.Manager; -using CoreLibrary.Persistance; -using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Logging; namespace MauiSpark { public static class MauiProgram { - public static Manager Manager { get; private set; } = new Manager(new Persistance()); - public static MauiApp CreateMauiApp() { var builder = MauiApp.CreateBuilder(); diff --git a/Sources/mastermind.sln b/Sources/mastermind.sln index 806d18f..bc5886c 100644 --- a/Sources/mastermind.sln +++ b/Sources/mastermind.sln @@ -9,11 +9,13 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ConsoleApp", "ConsoleApp\Co EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MauiSpark", "MauiSpark\MauiSpark.csproj", "{BD22A919-E40E-4791-A6B0-2B8D37BBE834}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UnitTesting", "UnitTesting\UnitTesting.csproj", "{A2182054-C0D1-46D6-BD39-F3F7926CE2DD}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "UnitTesting", "UnitTesting\UnitTesting.csproj", "{A2182054-C0D1-46D6-BD39-F3F7926CE2DD}" ProjectSection(ProjectDependencies) = postProject {341FB405-085D-4C34-B395-64EF0F9B93E0} = {341FB405-085D-4C34-B395-64EF0F9B93E0} EndProjectSection EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ConsoleApp1", "ConsoleApp1\ConsoleApp1.csproj", "{0A48983C-0251-4039-895E-587CD7F8E1C6}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -38,6 +40,10 @@ Global {A2182054-C0D1-46D6-BD39-F3F7926CE2DD}.Debug|Any CPU.Build.0 = Debug|Any CPU {A2182054-C0D1-46D6-BD39-F3F7926CE2DD}.Release|Any CPU.ActiveCfg = Release|Any CPU {A2182054-C0D1-46D6-BD39-F3F7926CE2DD}.Release|Any CPU.Build.0 = Release|Any CPU + {0A48983C-0251-4039-895E-587CD7F8E1C6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0A48983C-0251-4039-895E-587CD7F8E1C6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0A48983C-0251-4039-895E-587CD7F8E1C6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0A48983C-0251-4039-895E-587CD7F8E1C6}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE