using System.Collections; using UnityEngine; using UnityEngine.Networking; /// /// Signale au serveur qu'un job de rendu est terminé (version standalone Windows). /// Appelé par PDFCreate.Calculate() après la génération du PDF et l'envoi de l'email. /// /// Contrat de complete-job.php : /// jobId : doit correspondre à ^job_[a-zA-Z0-9_-]+$ /// status : "completed" ou "failed" — toute autre valeur => 400 /// resultUrl : optionnel, stocké dans le JSON du job /// error : optionnel, utilisé quand status = "failed" /// (aucune clé d'API n'est validée par l'endpoint) /// public class RenderJobCompletion : MonoBehaviour { [SerializeField] private string completeJobUrl = "https://ukitchenit.com/aidesign/render/complete-job.php"; public IEnumerator CompleteJob(string jobId, string resultUrl) { yield return SendStatus(jobId, "completed", resultUrl, null); } public IEnumerator FailJob(string jobId, string error) { yield return SendStatus(jobId, "failed", null, error); } private IEnumerator SendStatus( string jobId, string status, string resultUrl, string error) { if (string.IsNullOrEmpty(jobId)) { Debug.LogWarning("[RenderJob] CompleteJob : jobId vide — ignoré."); yield break; } WWWForm form = new WWWForm(); form.AddField("jobId", jobId); form.AddField("status", status); if (!string.IsNullOrEmpty(resultUrl)) form.AddField("resultUrl", resultUrl); if (!string.IsNullOrEmpty(error)) form.AddField("error", error); using UnityWebRequest request = UnityWebRequest.Post(completeJobUrl, form); request.timeout = 30; yield return request.SendWebRequest(); if (request.result != UnityWebRequest.Result.Success) { Debug.LogError( "[RenderJob] ❌ complete-job " + jobId + " échoué (" + request.responseCode + ") : " + request.error + "\n" + request.downloadHandler.text); } else { Debug.Log( "[RenderJob] ✅ Job " + jobId + " → " + status + "\n" + request.downloadHandler.text); } } }