Persistance reprise à zero
continuous-integration/drone/push Build is failing Details

master
Pauline PRADY 11 months ago
parent a2c964c583
commit eb1fadc05e

@ -0,0 +1,14 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\CoreLibrary\CoreLibrary.csproj" />
</ItemGroup>
</Project>

@ -0,0 +1,9 @@
using CoreLibrary.Persistance;
using CoreLibrary.Joueurs;
PersistanceJSON p = new();
List<Joueur> mesJoueurs = new List<Joueur>([
new Joueur("Céleste"),
new Joueur("Pauline")
]);

@ -6,4 +6,8 @@
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<Compile Remove="Persistance\Persistance.cs" />
</ItemGroup>
</Project>

@ -115,8 +115,6 @@ namespace CoreLibrary
{
Regles = regles;
Persistance = persistance;
ChargerPartie();
}
/// <summary>
@ -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);
}
/// <summary>
/// Sauvegarder la partie
/// </summary>
private void SauvegarderPartie()
{
Persistance.EnregistrerParties(new List<Partie> { this });
}
/// <summary>
/// Charger la partie
/// </summary>
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;
}
}
}
}

@ -1,17 +1,11 @@
using CoreLibrary.Joueurs;
 using CoreLibrary.Joueurs;
namespace CoreLibrary.Persistance
{
public interface IPersistance
{
public bool EstEnregistre { get; }
public T[] Charger<T>();
public List<Joueur> ChargerJoueurs();
public List<Partie> ChargerParties();
public void EnregistrerJoueurs(List<Joueur> joueurs);
public void EnregistrerParties(List<Partie> parties);
public void Enregistrer<T>(T[] elements);
}
}

@ -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<Joueur> joueurs;
public IReadOnlyCollection<Joueur> Joueurs => joueurs.AsReadOnly();
private readonly List<Partie> parties;
public IReadOnlyCollection<Partie> Parties => parties.AsReadOnly();
public Manager(IPersistance persistance)
{
this.persistance = persistance ?? throw new ArgumentNullException(nameof(persistance));
joueurs = this.persistance.ChargerJoueurs() ?? new List<Joueur>();
parties = this.persistance.ChargerParties() ?? new List<Partie>();
}
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);
}
}
}

@ -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<Joueur> ChargerJoueurs()
{
if (!File.Exists(joueursFilePath))
{
return new List<Joueur>();
}
DataContractJsonSerializer jsonSerializer = new DataContractJsonSerializer(typeof(List<Joueur>));
List<Joueur> joueurs;
using (FileStream s = File.OpenRead(joueursFilePath))
{
joueurs = jsonSerializer.ReadObject(s) as List<Joueur>;
}
return joueurs;
}
public List<Partie> ChargerParties()
{
if (!File.Exists(partiesFilePath))
{
return new List<Partie>();
}
DataContractJsonSerializer jsonSerializer = new DataContractJsonSerializer(typeof(List<Partie>));
List<Partie> parties;
using (FileStream s = File.OpenRead(partiesFilePath))
{
parties = jsonSerializer.ReadObject(s) as List<Partie>;
}
return parties;
}
public void EnregistrerJoueurs(List<Joueur> joueurs)
{
DataContractJsonSerializer jsonSerializer = new DataContractJsonSerializer(typeof(List<Joueur>));
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<Partie> parties)
{
DataContractJsonSerializer jsonSerializer = new DataContractJsonSerializer(typeof(List<Partie>));
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);
}
}
}

@ -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<T>()
{
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<Joueur>));
T[] elements;
using (FileStream s = File.OpenRead(fichier))
{
elements = jsonSerializer.ReadObject(s) as T[];
}
Directory.SetCurrentDirectory(ancienDossier);
return elements;
}
public void Enregistrer<T>(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<Partie>));
using(FileStream s = File.Create(fichier))
{
using(XmlDictionaryWriter writer = JsonReaderWriterFactory.CreateJsonWriter(
s,
Encoding.UTF8,
false,
true))
{
jsonSerializer.WriteObject(writer, elements);
}
}
Directory.SetCurrentDirectory(ancienDossier);
}
}
}

@ -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();

@ -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

Loading…
Cancel
Save