From 647f67556f75a1932a801f43eb1bdaee764ff06b Mon Sep 17 00:00:00 2001 From: Sofiane Lasri <alasri250@gmail.com> Date: Tue, 6 Jun 2023 12:06:44 +0200 Subject: [PATCH] =?UTF-8?q?Ajout=20de=20la=20r=C3=A9cup=C3=A9ration=20du?= =?UTF-8?q?=20score=20depuis=20le=20serveur,=20et=20ajout=20de=20la=20m?= =?UTF-8?q?=C3=A9thode=20getScore.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Pendu/GameEngine.swift | 77 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) diff --git a/Pendu/GameEngine.swift b/Pendu/GameEngine.swift index e99a54a..5691499 100644 --- a/Pendu/GameEngine.swift +++ b/Pendu/GameEngine.swift @@ -155,6 +155,10 @@ class GameEngine: NSObject { return false; } + public func getScore() -> Int { + return self.score; + } + public func saveScore() -> Void { // Enregistrement du score dans la base Core Data @@ -179,5 +183,78 @@ class GameEngine: NSObject { static func getOnlineScoreboard() -> Void { // Récupération du classement depuis le serveur + + // URL de l'API + let url = URL(string: "https://miscs.sl-projects.com/IUT-ORSAY/LP-PRISM/TP-iOS/")! + + // Création de la tâche de session URLSessionDataTask pour récupérer les données + let task = URLSession.shared.dataTask(with: url) { (data, response, error) in + // Vérification des erreurs et de la disponibilité des données + guard let data = data, error == nil else { + print("Erreur lors de la récupération des données : \(error?.localizedDescription ?? "Erreur inconnue")") + return + } + + // Récupération du contexte Core Data + guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else { + print("Impossible d'obtenir l'AppDelegate") + return + } + let managedContext = appDelegate.persistentContainer.viewContext + + do { + // Décodage du JSON en une liste de dictionnaires + guard let jsonArray = try JSONSerialization.jsonObject(with: data, options: []) as? [[String: Any]] else { + print("Le JSON n'est pas au format attendu.") + return + } + + // Utilisation des données JSON + for jsonScore in jsonArray { + // Création d'une instance NSManagedObject pour le score + let scoreObject = Score(context: managedContext) + + // Association des valeurs du JSON aux attributs du modèle Core Data + scoreObject.categoryName = jsonScore["categoryName"] as? String ?? "" + scoreObject.difficulty = jsonScore["difficulty"] as? String ?? "" + scoreObject.playerName = jsonScore["playerName"] as? String ?? "" + + if let scoreValue = jsonScore["score"] as? Int { + scoreObject.score = Int16(scoreValue) + } else if let scoreValueString = jsonScore["score"] as? String, + let scoreValue = Int(scoreValueString) { + scoreObject.score = Int16(scoreValue) + } else { + scoreObject.score = 0 // Valeur par défaut si le score ne peut pas être extrait du JSON + } + } + + // Sauvegarde du contexte Core Data + do { + try managedContext.save() + } catch { + print("Erreur lors de la sauvegarde du contexte Core Data : \(error.localizedDescription)") + } + + // Récupération des scores enregistrés dans une liste + let fetchRequest = NSFetchRequest<Score>(entityName: "Score") + let fetchedScores = try managedContext.fetch(fetchRequest) + + // Utilisation de la liste de scores + for fetchedScore in fetchedScores { + print("Category: \(fetchedScore.categoryName)") + print("Difficulty: \(fetchedScore.difficulty)") + print("Player Name: \(fetchedScore.playerName)") + print("Score: \(fetchedScore.score)") + print("------------------------") + } + } catch { + print("Erreur lors du décodage JSON : \(error.localizedDescription)") + } + } + + // Lancement de la tâche + task.resume() + } } -- GitLab