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