using System; using System.Collections; using System.Collections.Generic; using SimpleJSON; using UnityEngine; using UnityEngine.Networking; [Serializable] public class ErrorResponse { public int status; public Dictionary data; public string message; } public enum ErrorType { None, Authentication, Network, Server, Unknown } public class webservice : MonoBehaviour { public static webservice instance; public string lastError; // Store the last error message public ErrorResponse lastErrorResponse; public ErrorType lastErrorType; // Start is called once before the first execution of Update after the MonoBehaviour is created void Start() { instance = this; } public IEnumerator LoginRequest(Dictionary formData, Action onComplete) { string url = "http://194.62.43.230:8000/login"; lastError = null; lastErrorResponse = null; lastErrorType = ErrorType.None; WWWForm form = new WWWForm(); String par = ""; foreach (KeyValuePair entry in formData) { par += entry.Key + "=" + entry.Value; form.AddField(entry.Key, entry.Value); } print(url + "?" + par); using (UnityWebRequest www = UnityWebRequest.Post(url, form)) { yield return www.SendWebRequest(); if (www.result == UnityWebRequest.Result.Success) { print("Response: " + www.downloadHandler.text); var json = JSON.Parse(www.downloadHandler.text); PlayerPrefs.SetString("user", json["data"].ToString()); User response = new User(json["data"].ToString()); onComplete?.Invoke(response); } else { try { lastErrorResponse = JsonUtility.FromJson(www.downloadHandler.text); lastError = lastErrorResponse.message; if (lastErrorResponse.status >= 400 && lastErrorResponse.status < 500) { lastErrorType = ErrorType.Authentication; lastError = "خطا در احراز هویت: " + lastErrorResponse.message; } else if (lastErrorResponse.status >= 500) { lastErrorType = ErrorType.Server; lastError = "خطای سرور: " + lastErrorResponse.message; } else { lastErrorType = ErrorType.Unknown; lastError = "خطای ناشناخته: " + lastErrorResponse.message; } Debug.LogError($"خطای API: وضعیت={lastErrorResponse.status}, پیام={lastErrorResponse.message}, نوع={lastErrorType}"); } catch (Exception e) { lastError = www.error; if (www.error.Contains("NetworkError") || www.error.Contains("ConnectionError") || www.error.Contains("Cannot connect")) { lastErrorType = ErrorType.Network; lastError = "خطای اتصال به اینترنت"; } else { lastErrorType = ErrorType.Unknown; lastError = "خطای ناشناخته در ارتباط با سرور"; } Debug.LogError($"خطای شبکه: {www.error}, نوع={lastErrorType}"); } onComplete?.Invoke(null); } } } public IEnumerator GetInfoRequest(Action onComplete) { string url = "http://194.62.43.230:8000/getInfo"; lastError = null; lastErrorResponse = null; UnityWebRequest www = UnityWebRequest.Get(url); www.SetRequestHeader("Authorization", "token " + EN.instance.Me.token); yield return www.SendWebRequest(); if (www.result == UnityWebRequest.Result.Success) { Debug.Log("Response: " + www.downloadHandler.text); var root = JSON.Parse(www.downloadHandler.text); GetInfoResponse response = new GetInfoResponse(); var data = root["data"]; // --- Customer --- var cust = new Customer(); cust.id = data["customer"]["id"].AsInt; cust.semat = data["customer"]["semat"]; cust.user = data["customer"]["user"].AsInt; cust.user_id = data["customer"]["user_id"].AsInt; cust.mobile_number = data["customer"]["mobile_number"]; cust.profile_img = data["customer"]["profile_img"]; cust.profile_glb = data["customer"]["profile_glb"]; cust.is_sms_verified = data["customer"]["is_sms_verified"].AsBool; cust.is_email_verified = data["customer"]["is_email_verified"].AsBool; response.customer = cust; // --- Images --- var imagesArray = data["images"].AsArray; for (int i = 0; i < imagesArray.Count; i++) { var item = imagesArray[i]; var img = new ImageData(); img.id = item["id"].AsInt; img.url = item["url"]; img.image = item["image"]; img.name = item["name"]; img.created_at = item["created_at"]; response.images.Add(img); } // --- Pdfs --- var pdfsArray = data["pdfs"].AsArray; for (int i = 0; i < pdfsArray.Count; i++) { var item = pdfsArray[i]; var pdf = new PdfData(); pdf.id = item["id"].AsInt; pdf.url = item["url"]; pdf.pdf = item["pdf"]; pdf.name = item["name"]; pdf.created_at = item["created_at"]; response.pdfs.Add(pdf); } // --- Videos --- var videosArray = data["videos"].AsArray; for (int i = 0; i < videosArray.Count; i++) { var item = videosArray[i]; var vid = new VideoData(); vid.id = item["id"].AsInt; vid.url = item["url"]; vid.video = item["video"]; vid.name = item["name"]; vid.created_at = item["created_at"]; response.videos.Add(vid); } // --- Glbs --- var glbsArray = data["glbs"].AsArray; for (int i = 0; i < glbsArray.Count; i++) { var item = glbsArray[i]; var glb = new GlbData(); glb.id = item["id"].AsInt; glb.url = item["url"]; glb.glb = item["glb"]; glb.name = item["name"]; glb.created_at = item["created_at"]; response.glbs.Add(glb); } // حالا response آماده استفاده‌ست Debug.Log("موبایل: " + response.customer.mobile_number); Debug.Log("اولین عکس: " + (response.images.Count > 0 ? response.images[0].image : "نداره")); onComplete?.Invoke(response); } else { try { lastErrorResponse = JsonUtility.FromJson(www.downloadHandler.text); lastError = lastErrorResponse.message; Debug.LogError($"API Error: Status={lastErrorResponse.status}, Message={lastErrorResponse.message}"); } catch (Exception e) { lastError = www.error; Debug.LogError($"Network Error: {www.error}"); } onComplete?.Invoke(null); } } } [System.Serializable] public class GetInfoResponse { public Customer customer; public List images = new List(); public List pdfs = new List(); public List videos = new List(); public List glbs = new List(); public object subscription; } [System.Serializable] public class Customer { public int id; public string semat; public int user; public int user_id; public string mobile_number; public string profile_img; public string profile_glb; public bool is_sms_verified; public bool is_email_verified; } [System.Serializable] public class ImageData { public int id; public string url; public string image; public string name; public string created_at; } [System.Serializable] public class PdfData { public int id; public string url; public string pdf; public string name; public string created_at; } [System.Serializable] public class VideoData { public int id; public string url; public string video; public string name; public string created_at; } [System.Serializable] public class GlbData { public int id; public string url; public string glb; public string name; public string created_at; } [Serializable] public class User { public int id; public string token; public string first_name; public string last_name; public string job; public GameObject character; public string characterUrl; private string user; public User() { } public User(string j) { if (EN.instance) EN.instance.Print(j); var json = JSON.Parse(j); User response = this; response.token = json["token"]; response.id = json["user"]["id"].AsInt; response.first_name = json["user"]["first_name"]; response.last_name = json["user"]["last_name"]; response.characterUrl = json["customer"]["profile_glb"]; EN.instance.Print(response.last_name); } }