diff --git a/Pendu/GameEngine.swift b/Pendu/GameEngine.swift index e99a54aed2060e237cf16568522c31fb489b48a7..56914995cddd9c00ce920b851df9944364053452 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() + } }